关于账本数据库:你想知道的这里都有

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

💕前言十二月份出个openGuass集合专栏带领大家浅浅的认识一下国产数据库吧💕

img

1. 什么是账本数据库

区块链大家想必都耳熟能详比特币、以太坊甚至狗狗币等代币作为区块链的代名词不仅牵动着某些人的账户盈亏甚至影响着市面的显卡、硬盘价格。但是作为数据库相关的技术人员或者爱好者对这一新技术我们更多的是关系其核心技术点。

区块链作为一种分布式账本技术克服了传统集中式账本的存储效率低、可信度低、易受单点攻击的劣势从技术上保证了其具有分布式共享、多方共识、不可篡改和可追溯的特点。

那么区块链这么好我们能用它来替代数据库吗答案当然是NO因为区块链往往有着交易性能低下查询不便等诸多弊端。比特币系统仅支持每秒处理7笔交易如果用它来承担主要的金融交易效率自然是十分低下的。业界往往采用数据库来提高区块链的数据存储、检索能力。我们不妨换个角度利用openGauss数据库天然具有的高性能、高可靠、高安全等优势从openGauss出发融入一些区块链的密码学防篡改、多方共识等技术来提高数据库自身的防篡改、可追溯能力。防篡改账本数据库的idea应运而生。

区块链从基础架构模型上讲通常被分为七层

  • 应用层

  • 查询层

  • 合约层

  • 激励层

  • 共识层

  • 网络层

  • 数据层

每一层的详细的技术点如下图所示

图 1 区块链基础架构模型

数据库吸纳区块链防篡改的能力首先想到的就是从区块链技术的最底层数据层出发让数据库提供数据的校验信息记录以及数据的篡改校验的能力保证数据库在处理敏感信息时能够忠实的记录每一笔交易造成的数据更改形成一个忠实、完整的数据变更“账本”。我们本次要介绍的openGauss账本数据库即是在openGauss内核中植入了在数据修改时对数据的变更操作进行记录这一功能保证整个数据链路可查询、可溯源同时提供高效的篡改校验接口提供给上层的应用系统或者多个参与方之间互相校验数据的一致性。之后我们将详细介绍账本数据库的实现原理以及其对openGauss的改造。

2. openGauss账本数据库原理剖析

 图 2 账本数据库新增模块

客户端发送SQL对数据库中数据进行修改时要经过通信模块的接收解析模块的处理转成解析树然后经过优化生成执行计划。执行模块拿到执行计划会调用存储层接口对数据进行修改。如上图所示我们在数据的修改过程中增加了篡改校验信息的记录同时提供了篡改校验模块供用户调用接口执行校验。篡改信息记录和篡改校验的基础是我们针对数据库增、删、改操作设计的篡改校验信息。下面我们针对新增的篡改校验信息进行介绍。

2.1 防篡改用户表

图 3 防篡改用户表结构

在账本数据库特性中我们使用schema级别进行防篡改表和普通表的隔离。在防篡改schema中的表具有校验信息且每次涉及到增、删、改的操作均会记录相应的数据变化以及操作的语句我们称这些表为防篡改表。而普通的schema中的表我们称其为普通表。

防篡改表有如图 3所示的结构。在创建防篡改表时系统会增加一行hash列该列在发生数据插入或者数据修改时都会实时计算数据的摘要。数据与摘要存在一个tuple中密不可分。由hash函数的单向性我们将每一行的摘要作为该行数据在摘要空间的逻辑表示。

2.2 用户历史表

图 4 用户历史表结构

用户历史表结构见上图主要包含四列xid、hash_ins、hash_del、pre_hash。用户历史表的每一行对应着用户表的每一次行级数据更改其中xid记录数据更改时的xid号代表着操作进行的逻辑时间顺序。hash_ins记录INSERT或者UPDATE操作插入的数据行的hash值hash_del记录着DELETE或者UPDATE删除数据行的hash值。同时hash_ins和hash_del是否为空代表着INSERT、DELETE、UPDATE三种不同的操作类型其对应关系如下表。

hash_ins

hash_del

Insert

√插入数据hash

--

Delete

--

√删除数据hash

Update

√新数据hash

√删除前数据hash

pre_hash将历史表的当前行数据和上一行的pre_hash数据进行拼接生成当前用户历史表的数据整体摘要计算公式如下

这里i代表用户历史表的第i行rowdatai为第i行xid||hash_ins||hash_del拼接的数据。

在校验用户历史表的完整性时通过使用rowdata数据从前往后依次计算pre_hash值并与表中的pre_hash进行比对如果数据不一致则说明用户历史表的完整性被破坏。

2.3 全局区块表结构

 图 5 全局区块表结构

全局区块表结构见上图表中每一行对应一次防篡改表修改行为作为一个区块保存。全局区块表主要包括三部分内容区块信息主要保存了区块相关的标记信息包括区块号、时间戳。操作信息包括了用户对防篡改数据表的操作信息包括数据库名、用户名、表名等标识信息以及对应的SQL语句。校验信息保存用于一致性或完整性校验的hash信息包括表级hashrel_hash、全局hashglobal_hash。

2.4 篡改校验算法

图 6 防篡改用户表校验信息生成

用户在调用篡改校验接口时系统可以并行的使用防篡改用户表生成表级的总校验信息使用用户表对应的历史表中的记录生成变更记录整体的校验信息。然后通过比较生成的两个校验信息是否一致来判断数据与操作是否一致。如果不一致则说明发生了绕过系统记录的修改数据行为即篡改行为。

通过防篡改用户表中的行级校验信息生成表级校验的过程如图 6 所示。在校验时会扫描表中的数据获取每一行中的校验信息并使用行校验信息对行数据进行校验。在扫描完整体的行校信息的过程中可以通过内置的可交换校验信息聚合算法不断生成当前已经扫描的数据的整体校验信息。由于信息聚合算法的可交换性这一过程可以完全并行执行。

通过用户历史表生成变更记录总体的校验信息如图 7 所示。通过我们设计的用户历史表的结构其hash_ins列中的非空元素代表了所有操作导致的数据校验信息的增加hash_del列中的非空元素则代表了校验数据减少。我们通过对两列元素做差集得到剩余的校验信息的集合。然后利用可交换校验信息聚合算法得到用户历史表中记录操作造成的变更记录整体的校验信息。这一过程由于聚合算法的可交换性可以对每行先进行hash_ins – hash_del然后在扫描的时候不断叠加生成。这里变更记录整体校验信息的生成也是完全可以并行的。

 图 7 用户历史表校验信息生成

3. openGauss账本数据库发展展望

账本数据库作为openGauss防篡改数据的基础目前支持了数据库内校验信息的记录以及提供高性能校验接口。提供了区块链技术层次中存储层的部分功能。为了实现防篡改 我们还需要增加多个数据库间的高性能远程执行能力以及提供可插拔的高性能多方共识协议这样才能形成完整的openGauss多方可信防篡改能力。在数据库融合区块链的领域openGauss会不断进化为大家带来更加易用、更加高效的防篡改数据库。

公众实时更新叶秋学长

下一篇解密openGauss DB4AI框架的内部机理

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 数据库