CQL #1:SQLChain 数据库创建流程

CQL是一种基于区块链的分布式数据库系统,采用分层架构,包括全局共识层和SQL共识层,支持DPoS和BFT-Raft共识算法。CQL通过独特的数据存储方式,实现了数据的不可篡改性和隐私保护,适用于GDPR等法规要求的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

News

  1. CQL 的测试网目前版本是 0.5.0 ,参见 Quickstart
  2. MacOS 用户可以用 brew install cql 直接安装 CQL 的客户端[1]
  3. CQL 的同学开源了商业产品中使用的『CookieScaner』,能帮助你了解你平时访问的网站,在没有得到你的允许的情况下都在你的浏览器里记录了那些 Cookie,以及他们的作用。[2]

分层架构

MainChain & SQLChain
  • 第一层: 全局共识层:
    • 整个网络中只有一个主链。
    • 主要负责数据库矿工与用户的合同匹配,交易结算,反作弊,子链哈希锁定等全局共识事宜。
  • 第二层: SQL 共识层:
    • 每个数据库都有自己独立的子链。
    • 主要负责数据库各种事务的签名,交付和一致性。这里主要实现永久可追溯性的数据历史,并且在主链中执行哈希锁定。
  • 点击这里查看矢量大图

主链和 SQL 链

CQL 采用分层的架构进行数据库的创建和运行,一个典型的数据的创建过程大致可以如下过程:

  1. "矿工" 启动后会自动向主链注册,注册信息包括:"最低可以接受的 Gas 价格"、"系统配置信息"、"对外 IP 及端口" 等;
  2. "矿工" 通过 ChainBus 订阅并关注和自己相关的信息;
  3. 客户端运行 cql create '{"node":2}'[3],向主链的任一 "出块节点"(BP: Block Producer)发送经过签名的数据库创建请求;
  4. 收到请求的 BP 在出块的过程(详见:主链出块流程)中进行 "矿工" 和数据库创建请求的撮合;
  5. 数据库创建请求 和 撮合结果 在 其它 BP 节点进行验证和确认;
  6. "矿工" 订阅收到数据库任务;
  7. "矿工" 通过 SQLChain 彼此发现、连接,组建 Kayak 数据库集群;
  8. 所有 "矿工" 准备就绪等待请求;
  9. 用户可以通过 cql console 命令来连接数据库,执行 SQL。

共识算法

CQL 支持两种共识算法:

  1. DPoS (委任权益证明) 应用在数据库的 最终一致性 和 Block Producer 所在的 第一层 (全局共识层) ,CQL 的矿工在客户端将所有SQL查询及其签名打包成块,从而形成整个区块链,我们把这个算法命名为 Xenomint
  2. BFT-Raft (拜占庭容错算法) bft-raft[4] 应用于数据库的 强一致性。我们把这个实现命名为 Kayak. 矿工 leader 会基于 Kayak两阶段提交 来支持 Transaction[5]

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

常见问题解答

  • Q: CQL 的数据库安全是如何做的?
    A: 不同于传统的数据库,CQL 是运行在开放互联网上的分布式数据库系统。安全方面主要做了如下的工作:
  1. 密钥体系:CQL 使用 Bitcoin 的 scep256k1 曲线的非对称加密算法产生的公私钥对。
  2. 网络通信:参见 网络安全
  3. 数据库权限 & 加密:
    1. 数据库安全网关
    2. 支持 SQL 加密函数 encrypt, decrypt,例如:
INSERT INTO "t1" ("k", "v") VALUES (1, encrypt("data", "pass", "salt")); 
SELECT decrypt("v", "pass", "salt") FROM "t1" WHERE "k"=1;复制代码
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 上完成的。默认情况下,主链仅会保存子链的区块哈希。更多细节请参考主链和 SQL 链


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

参考

  1. ^brew developers.covenantsql.io/docs/zh-CN/…
  2. ^CookieScaner github.com/CovenantSQL…
  3. ^Create developers.covenantsql.io/docs/zh-CN/…
  4. ^BFT-Raft github.com/CovenantSQL…
  5. ^Transaction github.com/CovenantSQL…


转载于:https://juejin.im/post/5cc51ef7f265da039955e550

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值