主页 > 华为imtoken无法安装 > 关于账本数据库:你想知道的都在这里

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

华为imtoken无法安装 2023-07-23 05:10:26

前言:12月份将出一个openGuass合集专栏,引导大家对国产数据库有一个简单的了解。

img

1. 什么是账本数据库

大家一定对区块链不陌生。 比特币、以太币,甚至狗狗币等代币,作为区块链的代名词,不仅影响着一些人账户的盈亏,甚至影响着市场上显卡、硬盘的价格。 但是作为数据库相关的技术人员或者爱好者,对于这项新技术,我们更关心的是它的核心技术点。

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

那么区块链这么好,我们是不是可以用它来代替数据库呢? 答案当然是否定的! 因为区块链往往存在交易性能低、查询不方便等诸多弊端。 比特币系统每秒仅支持 7 笔交易。 如果用来承接大宗金融交易,效率自然很低。 业界经常使用数据库来提高区块链的数据存储和检索能力。 我们不妨换个角度,利用openGauss数据库固有的高性能、高可靠性、高安全性,从openGauss入手,融入一些区块链密码学防篡改、多方共识等技术,提高数据库自身的防篡改、Traceability。 防篡改账本数据库的想法应运而生。

在基础设施模型方面btc系统程序,区块链通常分为七层:

各层详细技术点如下图所示:

1

图 1 区块链基础架构模型

数据库吸纳区块链的防篡改能力,首先想到的是从区块链技术的底层做起:数据层,让数据库提供数据验证信息记录和数据验证的能力。数据篡改验证,确保数据库在处理敏感信息时,能够忠实记录每笔交易引起的数据变化,形成一个忠实完整的数据变化“账本”。 本次我们要介绍的openGauss账本数据库,就是在openGauss内核中植入数据修改时记录数据变更操作的功能,保证整个数据链路可查询可追溯; 同时,提供高效的篡改验证接口,提供给上层应用系统或验证多个参与方数据的一致性。 后面会详细介绍账本数据库的实现原理和向openGauss的改造。

2、openGauss账本数据库原理分析

1

图2 账本数据库新模块

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

2.1 防篡改用户表

1

图3 防篡改用户表结构

在账本数据库特性中,我们使用schema级别来隔离防篡改表和普通表。 防篡改模式中的表都有校验信息,每一次涉及增删改查的操作都会记录相应的数据变化和操作语句。 我们称这些表为防篡改表。 普通模式中的表称为普通表。

防篡改表的结构如图3所示,在创建防篡改表时,系统会添加一行hash列,在插入或修改数据时实时计算数据的摘要。 data和summary存在于一个元组中,密不可分。 由于散列函数的单向性,我们使用每一行的抽象作为该行数据在抽象空间中的逻辑表示。

2.2 用户历史表

1

图4 用户历史表结构

用户历史表的结构如上图所示,主要包括四列:xid、hash_ins、hash_del、pre_hash。 用户历史表的每一行对应用户表的每一次行级数据变化,其中xid记录了数据变化时的xid号,代表了操作的逻辑时序。 hash_ins记录了INSERT或UPDATE操作插入的数据行的哈希值,hash_del记录了DELETE或UPDATE删除的数据行的哈希值。 同时hash_ins和hash_del是否为空代表三种不同的操作类型:INSERT、DELETE、UPDATE。 对应关系如下。

hash_ins

散列删除

插入

√(插入数据哈希)

--

删除

--

√(删除数据哈希)

更新

√(新数据哈希)

√(删除前的数据哈希)

pre_hash将历史表的当前行数据与上一行的pre_hash数据拼接,生成当前用户历史表的整体数据汇总。 计算公式如下:

1

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

在验证用户历史表的完整性时,使用rowdata数据从前到后计算pre_hash值,并与表中的pre_hash进行比较。 如果数据不一致,则意味着用户历史表的完整性被破坏。

2.3 全局块表结构

1

图5 全局块表结构

全局块表​​的结构如上图所示。 表中的每一行对应一个防篡改的表修改行为,并保存为一个块。 全局区块表主要包括三部分: 区块信息主要存储与区块相关的标签信息btc系统程序,包括区块号和时间戳。 操作信息包括用户对防篡改数据表的操作信息,包括数据库名、用户名、表名等标识信息,以及对应的SQL语句。 验证信息存储用于一致性或完整性验证的哈希信息,包括表级哈希(rel_hash)和全局哈希(global_hash)。

2.4 篡改验证算法

1

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

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

图6显示了防篡改用户表中的行级校验和信息生成表级校验和的过程。 校验时,扫描表中的数据,获取每一行中的校验信息,利用行校验信息对行数据进行校验。 在扫描完整验证信息主体的过程中,内置的可交换验证信息聚合算法可以持续生成当前扫描数据的整体验证信息。 由于信息聚合算法的可交换性,这个过程可以完全并行执行。

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

1

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

三、openGauss账本数据库的发展前景

账本数据库作为openGauss防篡改数据的基础,目前支持在数据库中记录验证信息,并提供高性能的验证接口。 提供区块链技术层中存储层的部分功能。 为了实现防篡改,我们还需要增加多个数据库之间的高性能远程执行能力,并提供可插拔的高性能多方共识协议,从而形成完整的openGauss多方可信防篡改。篡改能力。 在数据库与区块链集成领域,openGauss将不断进化,为您带来更易用、更高效的防篡改数据库。

公开实时更新:叶秋前辈

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