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

news2024/11/25 20:16:55

💕前言:十二月份出个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信息,包括表级hash(rel_hash)、全局hash(global_hash)。

2.4 篡改校验算法

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

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

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

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

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

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

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

公众实时更新:叶秋学长

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/50532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《歌在飞》在抖音播放7.7亿,歌者苏勒亚其其格用公益让爱心传递

随着短视频的流行,抖音平台也被大家所熟知,很多好听的音乐作品,都是通过抖音平台传唱开来。 曾经有一首《歌在飞》的音乐作品,在抖音平台传唱度很广,截止目前已经有7.7亿的播放量。据悉,《歌在飞》这首歌曲…

基于QPSK的载波同步和定时同步性能仿真,包括Costas环的gardner环

目录 1.算法描述 2.matlab算法仿真效果 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 载波同步是相干解调的基础,不管对于模拟通信还是数字通信来说,只要是相干解调,接收端都必须提供同频同相的载波。当然,若采用基带传输&#…

hadoop 3.x大数据集群搭建系列7-安装Hudi

文章目录编译环境准备一. 下载并解压hudi二. maven的下载和配置2.1 maven的下载和解压2.2 添加环境变量到/etc/profile中2.3 修改为阿里镜像三. 编译hudi3.1 修改pom文件3.2 修改源码兼容hadoop33.3 手动安装Kafka依赖3.4 解决spark模块依赖冲突3.4.1 修改hudi-spark-bundle的p…

pytest + yaml 框架 - 3.全局仅登录一次,在用例中自动在请求头部添加Authentication token认证

前言 我们在使用自动化测试框架的时候,经常会遇到一个需求,希望在全局用例中,仅登录一次,后续所有的用例自动带上请求头部token 或者cookies。 环境准备 Python 3.8版本 Pytest 7.2.0 最新版 pip 安装插件 pip install pytes…

[附源码]Python计算机毕业设计Django的实验填报管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,我…

OSSID: Online Self-Supervised Instance Detection by (And For) Pose Estimation

许多机器人操作算法都需要 实时目标姿态估计。然而,最先进的目标姿态估计方法是针对一组特定的对象进行训练的;因此,这些方法需要 重新训练 以估计每个新对象的姿势。本文提出了 OSSID 框架,利用 慢速零样本 姿态估计器 来 自监督…

OpenGL 图像色调

目录 一.OpenGL 图像色调 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 图像色调 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录…

Spring | IOC技术之Bean的配置与实例化

👑 博主简介:    🥇 Java领域新星创作者    🥇 阿里云开发者社区专家博主、星级博主、技术博主 🤝 交流社区:BoBooY(优质编程学习笔记社区) 文章目录Bean的基础配置1、id 与 cla…

家电生产线数控机床上下料长臂机器人组设计

目录 摘 要 I ABSTRCT II 前言 III 1.长臂机器人组概况 1 1.1国内外发展状况 1 1.2研究意义 2 1.2.1长臂机器人组研究现状 2 1.2.2长臂机器人组研究方向 3 1.3本课题意义和目的 4 1.3.1本课题的意义 4 1.3.2本课题的目的 4 2.长臂机器人组的组成分类及设计分析 6 2.1 长臂机器人…

【车载开发系列】UDS诊断---诊断故障清除($0x14)

【车载开发系列】UDS诊断—诊断故障清除($0x14) UDS诊断---诊断故障清除($0x14)【车载开发系列】UDS诊断---诊断故障清除($0x14)一.概念定义二.参数说明三.清除内容方式1)清除内容2)…

python接口自动化44- requests 库使用 hook 机制

前言 requests 是 Hooks 即钩子方法,用于在某个框架固定的某个流程执行是捎带执行(钩上)某个自定义的方法。 requests 库只支持一个 response 的钩子,即在响应返回时可以捎带执行我们自定义的某些方法。 可以用于打印一些信息&am…

Unity引擎开发-无人机模拟飞行实现

目 录 摘 要 I Abstract II 一、 绪论 1 (一) 研究背景和研究意义 1 (二) 国内外研究现状 1 (三) 论文组织结构 2 二、 3D游戏技术的知识系统 2 (一) 3D图形库 2 (二&…

UML概述及UML类图详解

一 UML介绍 UML这三个字母的全称是Unified Modeling Language,翻译就是统一建模语言,是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果 UML 本身是一套符号的规定,就像数学符号和化学符…

Linux——md5命令

文章目录介绍选项使用案例生成文件md5值文本模式或二进制模式md5值重定向重定向追加md5校验实际开发场景介绍 md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相…

CTGU操作系统

CTGU操作系统第一章第二章 Operating-System structures操作系统结构第三章自己看,懒得写了,我也不知道为啥划重点他要把所有PPT过一遍,离谱第一章 第二章 Operating-System structures操作系统结构 第三章自己看,懒得写了&#x…

【能效管理】电力监控系统在某商业数据中心的应用分析

摘要:在电力系统的运行过程中,变电站作为整个电力系统的核心,在保证电力系统可靠的运行方面起着至关重要的作用,基于此需对变电站监控系统的特点进行分析,结合变电站监控系统的功能需求,对变电站电力监控系…

Yoshua Bengio:我的一生

文 | 智商掉了一地2018 年图灵奖获得者、AI 先驱、深度学习三巨头之一、对抗生成网络 GAN、标志性的银灰卷发和浓眉,如果还没猜到的话,当你看到这个封面,一定就会意识到自己在学习的路上,已经或间接或直接地拜读过大佬的著作了。看…

云原生主题学习月|成为社区领学员,解锁专属奖励及超多数量社区学员奖品!

CSDN 已上线亚马逊云科技超过 60 门中文数字化培训课程,希望为学习者提供亚马逊云科技基础技能知识和最佳实践。 每门课程时长从十分钟到几小时不等,由亚马逊云科技专家打造,其中包括最受欢迎的《亚马逊云科技云从业者必修知识》&#xff0c…

为什么 FindFirstFile 会查找短文件名?

FindFirstFile 函数会尝试匹配短文件名和长文件名。这可能会产生一些令人惊讶的结果。例如,如果你查找 “*.htm” ,那么它会返回给你文件 “x.html” ,因为它的短文件名是 “X~1.HTM”。 这确实比较令人感到意外。 为什么 FindFirstFile 会匹…

行业重磅!神策可视化全埋点正式支持 Flutter 平台!

Flutter 框架推出至今,已经在超过 50 万个应用中使用,从 2019 年到现在一直保持着强劲的增长趋势。优秀的性能、跨平台能力和活跃的技术社区使得其愈发受到广大开发者的青睐。而随着 Flutter 的普及和广泛应用,越来越多的企业和开发者对自动高…