首页 > 数据库 >openGauss2.1.0新特性-账本数据库实验

openGauss2.1.0新特性-账本数据库实验

时间:2024-04-09 11:26:44浏览次数:25  
标签:ledgernsp hash 数据库 usertable openGauss2.1 omm openGauss 账本 id

openGauss2.1.0 新特性-账本数据库实验
账本数据库融合了区块链思想,将用户操作记录至两种历史表中:用户历史表和全局区块表。当用户创建防篡改用户表时,系统将自动为该表添加一个 hash 列来保存每行数据的 hash 摘要信息,同时在 blockchain 模式下会创建一张用户历史表来记录对应用户表中每条数据的变更行为;而用户对防篡改用户表的一次修改行为将记录至全局区块表中。由于历史表具有只可追加不可修改的特点,因此历史表记录串联起来便形成了用户对防篡改用户表的修改历史。

下面,通过实验来理解账本数据库这一新特性:

1、创建防篡改模式: ledgernsp
登录数据库:

[omm@node1 ~]$ gsql -d postgres -p 26000 -r

gsql ((openGauss 2.1.0 build 590b0f8e) compiled at 2021-09-30 14:29:04 commit 0 last mr )

openGauss=# create schema ledgernsp with blockchain;

CREATE SCHEMA
查看新建的模式 ledgernsp:

openGauss=# \dn
List of schemas
Name | Owner
----------------+-------
blockchain | omm
cstore | omm
db4ai | omm
dbe_perf | omm
dbe_pldebugger | omm
ledgernsp | omm
pkg_service | omm
public | omm
snapshot | omm
sqladvisor | omm
(10 rows)
2、在防篡改模式下创建防篡改用户表:
openGauss=# CREATE TABLE ledgernsp.usertable(id int, name text);
CREATE TABLE
查看防篡改用户表结构及其对应的用户历史表结构:

openGauss=# \d+ ledgernsp.usertable;
Table "ledgernsp.usertable"
Column | Type | Modifiers | Storage | Stats target | Description
--------+---------+-----------+----------+--------------+-------------
id | integer | | plain | |
name | text | | extended | |
hash | hash16 | | plain | |
Has OIDs: no
Options: orientation=row, compression=no

openGauss=# \d+ blockchain.ledgernsp_usertable_hist;
Table "blockchain.ledgernsp_usertable_hist"
Column | Type | Modifiers | Storage | Stats target | Description
----------+--------+-----------+---------+--------------+-------------
rec_num | bigint | | plain | |
hash_ins | hash16 | | plain | |
hash_del | hash16 | | plain | |
pre_hash | hash32 | | plain | |
Indexes:
"gs_hist_24788_index" PRIMARY KEY, btree (rec_num int4_ops) TABLESPACE pg_default
Has OIDs: no
Options: internal_mask=263
3、修改防篡改用户表数据,并查看 hash 值的相应变化:
1)插入数据:

openGauss=# INSERT INTO ledgernsp.usertable VALUES(1, 'alex'), (2, 'bob'), (3, 'peter');
INSERT 0 3
openGauss=# SELECT *, hash FROM ledgernsp.usertable ORDER BY id;
id | name | hash
----+-------+------------------
1 | alex | 1f2e543c580cb8c5
2 | bob | 8fcd74a8a6a4b484
3 | peter | f51b4b1b12d0354b
(3 rows)
2)更新数据:

openGauss=# UPDATE ledgernsp.usertable SET name = 'bob2' WHERE id = 2;
UPDATE 1
openGauss=# SELECT *, hash FROM ledgernsp.usertable ORDER BY id;
id | name | hash
----+-------+------------------
1 | alex | 1f2e543c580cb8c5
2 | bob2 | 437761affbb7c605
3 | peter | f51b4b1b12d0354b
(3 rows)
3)删除数据:

openGauss=# DELETE FROM ledgernsp.usertable WHERE id = 3;
DELETE 1
openGauss=# SELECT *, hash FROM ledgernsp.usertable ORDER BY id
openGauss-# ;
id | name | hash
----+------+------------------
1 | alex | 1f2e543c580cb8c5
2 | bob2 | 437761affbb7c605
(2 rows)
4、查询历史表记录:
openGauss=# select * from blockchain.ledgernsp_usertable_hist;
rec_num | hash_ins | hash_del | pre_hash
---------+------------------+------------------+----------------------------------
0 | 1f2e543c580cb8c5 | | e45acf22fe042b2373d148f52903d29a
1 | 8fcd74a8a6a4b484 | | af08f23d38ecfec2ad9c6f1c4685a837
2 | f51b4b1b12d0354b | | 69e2885fb802fbb2b191211623115f9d
3 | 437761affbb7c605 | 8fcd74a8a6a4b484 | fd61cb772033da297d10c4e658e898d7
4 | | f51b4b1b12d0354b | 6475a497b7a272a92bab012d7f3d615b
(5 rows)
也可以通过查询 gs_global_chain,查询全局区块表记录。:

openGauss=# SELECT * FROM gs_global_chain;
blocknum | dbname | username | starttime | relid | relnsp | relname | relhash |
globalhash | txcommand
----------+----------+----------+-------------------------------+-------+-----------+-----------+------------------+--------
0 | postgres | omm | 2021-10-29 16:52:29.929996+08 | 24788 | ledgernsp | usertable | a41714001181a294 | 84c0a24
3ed2def4580f74cec812732fa | INSERT INTO ledgernsp.usertable VALUES(1, 'alex'), (2, 'bob'), (3, 'peter');
1 | postgres | omm | 2021-10-29 16:53:09.009009+08 | 24788 | ledgernsp | usertable | b3a9ed0755131181 | 9571d5a
0595aaf528917a6fe23d6e80a | UPDATE ledgernsp.usertable SET name = 'bob2' WHERE id = 2;
2 | postgres | omm | 2021-10-29 16:54:17.525065+08 | 24788 | ledgernsp | usertable | 0ae4b4e4ed2fcab5 | aa016e1
c8768857857815684f36aa4b2 | DELETE FROM ledgernsp.usertable WHERE id = 3;
(3 rows)
查询用户表数据及 hash 校验列:

openGauss=# SELECT *, hash FROM ledgernsp.usertable;
id | name | hash
----+------+------------------
1 | alex | 1f2e543c580cb8c5
2 | bob2 | 437761affbb7c605

(2 rows)
【实验结论】:
查询结果显示,用户表中剩余 2 条数据,与全局区块表记录中的记录一致。

实验结束。

参考:《openGauss2.1.0 开发者指南》

标签:ledgernsp,hash,数据库,usertable,openGauss2.1,omm,openGauss,账本,id
From: https://www.cnblogs.com/helloopenGauss/p/18123483

相关文章

  • 数据库
    一、基础篇执行一条select语句,期间发生了什么首先,我们需要了解关于Mysql的内部结构,MySQL内部分为两个部分,第一部分是Server层,第二部分是存储引擎,在Server层中,一般负责链接、分析和执行SQL语句,存储引擎层负责数据的存储和提取,在Mysql中默认使用的是innoDB存储引擎,不同的i......
  • 在ECS上安装部署openGauss数据库指导手册
    在ECS上安装部署openGauss数据库指导手册文档下载:在ECS上安装部署openGauss数据库指导手册.docx前言简介openGauss是关系型数据库,采用客户端/服务器,单进程多线程架构,支持单机和一主多备部署方式,备机可读,支持双机高可用和读扩展。本实验主要描述openGauss数据库在......
  • openGauss数据库的安装与使用
    VMware+CentOS7.6+OpenGauss2.0.1极简版安装环境准备Arch:x86-64OS:Win11VMware:16.1.2安装CentOS7.6CentOS镜像:CentOS-7.6.1810VMware中创建新的虚拟机时:1CPU2Core4GBNAT其他选择默认配置即可CentOS引导安装:语言选择英语打开网络设置时区安装位置和分区软件......
  • 民航电子数据库:表主键为自增,insert时报错:[E16005] 字段xxx不能取空值
    目录一、场景二、报错信息三、排查四、原因五、解决一、场景1、对接民航电子数据库2、表的主键为自增主键,使用mybatis封装好的insert方法新增记录时报错二、报错信息###Errorupdatingdatabase.Cause:java.sql.SQLException:[E16005]字段ID不能取空值......
  • openGauss 账本数据库机制
    账本数据库机制可获得性本特性自openGauss2.1.0版本开始引入。特性简介账本数据库特性,对用户指定的防篡改表增加校验信息,并记录用户对其数据的操作历史,通过数据和操作历史的一致性校验来保证用户数据无法被恶意篡改。在用户对防篡改表执行DML操作时,系统对防篡改表增加少量额......
  • 校园台球厅人员与设备管理系统的设计与实现|SpringBoot+ Mysql+Java+ B/S结构(可运行
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。推荐阅读300套最新项目持续更新中.....最新ssm+java项目文档+视频演示+可运行源码分享最新jsp+java项目文档+视频演示+可运行源码分享最新SpringBoot项目文档+视频演示+可运行源码分享2024年56套包含java,ssm......
  • HBase 数据库
    目录一、HBase数据模型1)NameSpace2)Table3)Row4)Column5)TimeStamp6)Cell二、HBase的逻辑结构三、HBase的物理结构四、HBase基本架构1)Master2)RegionServer3)Zookeeper4)HDFS 五、安装HBase数据库1)上传、解压2)配置环境变量3)修改HBase配置文件4)分发HBase到另外两......
  • NCI SEER breast cancer美国国立癌症研究所数据库乳腺癌生存分析和乳腺癌预测模型(202
    ​作者Toby,来源公众号:python生物信息学,美国国立癌症研究所数据库乳腺癌生存分析和乳腺癌预测模型NCI美国国立癌症研究所(NationalCancerInstitute,NCI)美国国立癌症研究所(NCI)是美国国家卫生研究院(NIH)的一个组成部分,致力于癌症研究和预防。以下是NCI的一些重要信息和职责:......
  • 安卓开发向数据库添加中文变成了?怎么解决
    在安卓开发中,如果向数据库添加数据时中文变成了问号'?',通常是因为数据库的编码方式不支持中文字符。为了解决这个问题,可以尝试以下方法:1.确保数据库的编码方式支持中文字符。一般来说,可以选择使用UTF-8编码来存储中文字符。2.在创建数据库连接时,设置正确的字符集,例如在JDB......
  • C# 操作 达梦数据库 DM8
    准备先到达梦官网下载数据库安装包根据官方提供的安装手册安装好DM8后,就可以了。测试环境Windows10x86_64DM8FreeSQL.NET8读写数据库这里使用FreeSQLORM进行读写DM8数据库。首先新建一个测试项目Console项目就行了。dotnetnewslndotnetnewconsoledotnets......