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

这篇具有很好参考价值的文章主要介绍了关于账本数据库:你想知道的这里都有。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

账本管理数据库,openGauss集合,区块链,数据库,openGauss

1. 什么是账本数据库

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

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

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

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

  • 应用层

  • 查询层

  • 合约层

  • 激励层

  • 共识层

  • 网络层

  • 数据层

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

账本管理数据库,openGauss集合,区块链,数据库,openGauss

图 1 区块链基础架构模型

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

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

账本管理数据库,openGauss集合,区块链,数据库,openGauss

 图 2 账本数据库新增模块

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

2.1 防篡改用户表

账本管理数据库,openGauss集合,区块链,数据库,openGauss

图 3 防篡改用户表结构

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

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

2.2 用户历史表

账本管理数据库,openGauss集合,区块链,数据库,openGauss

图 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数据进行拼接,生成当前用户历史表的数据整体摘要,计算公式如下:

账本管理数据库,openGauss集合,区块链,数据库,openGauss

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

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

2.3 全局区块表结构

账本管理数据库,openGauss集合,区块链,数据库,openGauss

 图 5 全局区块表结构

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

2.4 篡改校验算法

账本管理数据库,openGauss集合,区块链,数据库,openGauss图 6 防篡改用户表校验信息生成

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

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

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

账本管理数据库,openGauss集合,区块链,数据库,openGauss

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

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

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

公众实时更新:叶秋学长

下一篇解密openGauss DB4AI框架的内部机理文章来源地址https://www.toymoban.com/news/detail-779597.html

到了这里,关于关于账本数据库:你想知道的这里都有的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 探索数据结构世界之排序篇章(超级详细,你想看的都有)

    - 文章开头必看 1.!!!本文排序默认都是排 升序 2.排序是否稳定值指指排完序之后相同数的相对位置是否改变 3.代码相关解释我都写在注释中了,方便对照着看 插入排序是一种高效的简单排序算法,它的工作原理是将一个未排序的元素插入到一个已排序的列表中,并保持列

    2024年02月08日
    浏览(35)
  • postgresql 使用之 存储架构 触摸真实数据的存储结构以及组织形式,存入数据库的数据原来在这里

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 个人主页 :我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. postgresql 数据库服务运行时,数据在磁盘上是如何存储的呢?这就涉及到了存储架构。 在文件系统中,我们可以看到以目录和文

    2024年02月14日
    浏览(31)
  • 若依的多图片上传/回显/保存多图片路径url逗号隔开存数据库,前后端都有,拷贝即用

    用户在前端上传不等数量图片,现在需要把其相对/绝对路径存进数据库中,方便后期使用和页面回显. 后端存储pic字段是字符串 用于  用\\\",\\\"逗号  拼接 多个图片 url  1.html代码: 前端走马灯浏览已经上传的图片 前端JS方法,一共四个, 1.上传前校验方法 2.上传方法 3.上传数量限制方

    2024年02月16日
    浏览(39)
  • mysql面试题30:什么是数据库连接池、应用程序和数据库建立连接的过程、为什么需要数据库连接池、你知道哪些数据库连接池

    该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 数据库连接池是一种用于管理和复用数据库连接的技术。它是在应用程序和数据库之间建立一组数据库连接,并以池的形式存储起来,每当应用程序需

    2024年02月07日
    浏览(44)
  • Mysql数据库--修改root密码的几种方法(忘记密码&知道密码)

    🍁 通过 alter user root identified by \\\'新密码\\\'; 🍁 通过 set password for 用户名@\\\'用户地址\\\' = \\\'新密码\\\'; 2.1.1 🎈 停止mysql服务 2.1.2 🎈 创建mysql-init-file.txt文件 2.1.3 🎈 init-file的权限(最好赋权一下) 2.1.3 🎈 使用–init-file选项启动mysql服务 2.1.4 🎈 新密码连接测试(密码:Zyl@123321)

    2024年02月08日
    浏览(49)
  • 你知道图数据库-Neo4j是咋回事吗?来看看

    一. 背景介绍 最近有粉丝问我,百度百科中的明星关系效果是如何实现的呢?比如下图这种效果: 这种功能可以用关系型数据库来实现吗?答案当然是肯定的!其实简单的关系维护,本就是关系型数据库擅长的事情,但如果关系维度过多且关联足够复杂,还适合用关系型数据

    2024年02月12日
    浏览(27)
  • 天天使用MySQL,你知道MySQL数据库能抗多少压力吗?附(真实案例)

            今天给大家分享一个知识点,是关于MySQL数据库架构演进的,因为很多兄弟天天基于mysql做系统开发,但是写的系统都是那种 低并发压力、小数据量 的,所以哪怕上线了也就是这么正常跑着而已,但是你知道你连接的这个MySQL数据库他到底能抗多大并发压力吗?如

    2024年02月09日
    浏览(26)
  • 关于运维·关于数据库面试题

    目录 一、数据库类型 二、数据库引擎 三、mysql数据库类型 四、mysql的约束添加 五、主从复制原理 六、主从方式有几种 七、mysql主从数据不一致的原因 八、mysql的优化 九、什么是事务的特征 十、数据库读写分离的好处 十一、怎样优化sql语句 十二、mysql的同步方式 十三、m

    2024年01月21日
    浏览(44)
  • 关于数据库

    目录 一 什么是数据库(DB) 二 什么是数据库管理系统(DBMS) 三 数据库的作用/好处 简单理解,数据库是存放数据的地方,就像冰箱是存放冷鲜食品的地方。 数据是数据存储的基本对象,而数据分为多种形式,常见的是数字和文字,此外还有图形和声音。比如学校的数据库里,

    2024年02月19日
    浏览(31)
  • 关于数据库SQL优化

      在项目上线初期,业务数据量相对较少,SQL的执行效率对程序运行效率的影响可能不太明显,因此开发和运维人员可能无法判断SQL对程序的运行效率有多大。但随着时间的积累,业务数据量的增多,SQL的执行效率对程序的运行效率的影响逐渐增大,此时对SQL的优化就很有必

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包