绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
CQL #1:SQLChain 数据库创建流程
2022-04-12 14:23:12

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.cn/post/6844903832057544717
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
分享好友

分享这个小栈给你的朋友们,一起进步吧。

CovenantSqL
创建时间:2022-04-11 17:19:20
CovenantSqL
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • itt0918
    专家
戳我,来吐槽~