mysql中建表时自动生成主链_CQL #1:SQLChain 数据库创建流程

本文介绍了CQL (CovenantSQL) 的分层架构,特别是主链和SQL链的职责,以及数据库创建过程。CQL采用DPoS和BFT-Raft共识算法,支持数据安全、不可篡改和GDPR合规。通过CRAP操作(Create、Read、Append、Privatize)替代CRUD,保证数据历史记录。
摘要由CSDN通过智能技术生成

我们后续会有一个CQL #系列文章介绍 CovenantSQL (CQL)的实现原理,这是第一篇

下一篇,我们会详细介绍一下 『CQL MainChain 的出块流程』

NewsCQL 的测试网目前版本是 0.5.0 ,参见 Quickstart;

MacOS 用户可以用 brew install cql 直接安装 CQL 的客户端

CQL 的同学开源了商业产品中使用的『CookieScaner』,能帮助你了解你平时访问的网站,在没有得到你的允许的情况下都在你的浏览器里记录了那些 Cookie,以及他们的作用。

分层架构MainChain & SQLChain第一层: 全局共识层:整个网络中只有一个主链。

主要负责数据库矿工与用户的合同匹配,交易结算,反作弊,子链哈希锁定等全局共识事宜。

第二层: SQL 共识层:每个数据库都有自己独立的子链。

主要负责数据库各种事务的签名,交付和一致性。这里主要实现永久可追溯性的数据历史,并且在主链中执行哈希锁定。

主链和 SQL 链

CQL 采用分层的架构进行数据库的创建和运行,一个典型的数据的创建过程大致可以如下过程:"矿工" 启动后会自动向主链注册,注册信息包括:"最低可以接受的 Gas 价格"、"系统配置信息"、"对外 IP 及端口" 等;

"矿工" 通过 ChainBus 订阅并关注和自己相关的信息;

客户端运行 cql create '{"node":2}'

收到请求的 BP 在出块的过程(详见:

数据库创建请求 和 撮合结果 在 其它 BP 节点进行验证和确认;

"矿工" 订阅收到数据库任务;

"矿工" 通过 SQLChain 彼此发现、连接,组建 Kayak 数据库集群;

所有 "矿工" 准备就绪等待请求;

用户可以通过 cql console 命令来连接数据库,执行 SQL。

共识算法

CQL 支持两种共识算法:DPoS (委任权益证明) 应用在数据库的 最终一致性 和 Block Producer 所在的 第一层 (全局共识层) ,CQL 的矿工在客户端将所有SQL查询及其签名打包成块,从而形成整个区块链,我们把这个算法命名为

BFT-Raft (拜占庭容错算法) 强一致性。我们把这个实现命名为 Kayak 做 两阶段提交 来支持 Transaction

可以用命令行 cql create '{"UseEventualConsistency": true, "Node": 3}' 来创建 最终一致性 CQL 数据库。

常见问题解答Q: CQL 的数据库安全是如何做的?

A: 不同于传统的数据库,CQL 是运行在开放互联网上的分布式数据库系统。安全方面主要做了如下的工作:密钥体系:CQL 使用 Bitcoin 的 scep256k1 曲线的非对称加密算法产生的公私钥对。

网络通信:参见

数据库权限 & 加密:支持 SQL 加密函数 encrypt, decrypt,例如:

INSERT INTO "t1" ("k", "v") VALUES (1, encrypt("data", "pass", "salt"));

SELECT decrypt("v", "pass", "salt") FROM "t1" WHERE "k"=1;Q: CQL 数据如果是不可篡改的,如何处理类似 GDPR 里数据删除的需求?

A: CQL 支持两种开发模式,一种是传统的 DB per App(一个 App 一个数据库),另外一种是偏向隐私保护的 DB per User(一个用户一个数据库)。

DB per User 的开发模式非常适用于类似 "密码管理器","个人信息管理" 等应用的开发。由于用户是通过类似比特币用一个私钥管理自己财产的方式,通过一个 CQL 私钥管理自己的个人数据,所以这种模式开发的 App 天然具有不存储任何用户数据,从技术上天然符合包括以下法律法规的严苛要求:CQL 的完整数据是存在 SQLChain 的 Miner 上的,这部分数据相关的 SQL 历史是完整保存在 Miner 上的。相对于传统数据库的 CRUD (Create、Read、Update、Delete),CQL 支持的是 CRAP (Create、Read、Append、Privatize)。

Append vs Update

传统数据库对数据进行更改(Update)后是没有历史记录存在的,换句话说数据是可被篡改的。CQL 支持的是对数据进行追加(Append),其结果是数据的历史记录是得以保全。

Privatize vs Delete

传统数据库对数据进行删除(Delete)也属于对数据不可追溯、不可逆的篡改。CQL 支持的是对数据进行私有化(Privatize),也就是把数据库的权限转给一个不可能的公钥。这样就可以实现对子链数据的实质性删除。针对单条数据的链上所有痕迹抹除目前仅在企业版提供支持。Q: CQL 是如何存储数据库的数据的?

A: 用户数据库的绝大部分操作是在 SQLChain 上完成的。默认情况下,主链仅会保存子链的区块哈希。更多细节请参考

Q: CQL 支持数据量的上限大致是多少?

A: CQL 的数据库数据是存储在一个个独立的 SQLChain 上的。CQL 的数据库的数量取决于全网的 "矿工" 数量。单个 CQL 数据库的上限取决于硬件配置,截止 2019-04-25 线上最大的表是在 AWS c5.2xlarge 标准配置的主机上持续运行的由 2 Miner 组成的一个数据库,数据行数为 433,211,000,占用磁盘 3.2 TB。

CovenantSQL交流群:请加我微信auxten

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值