CovenantSQL从零使用指南
简要介绍
区块链技术出现有挺长一段时间了, 有不少基于这种技术的技术或者业务产品出现,近发现一种基于区块链的数据库产品, 叫ConvenantSQL。
ConvenantSQL是一个在底层使用了区块链技术的SQL数据库, 由一家创业公司开发并提供服务, 公司的地址是 https://covenantsql.io/, 与现在云平台提供的数据库服务不同, ConvenantSQL有一些让人感到惊奇的特性:
去中心化: 公有云 = 远端主机 + 外包运维, 比较形象地说明了现在公有云服务的本质, 所谓的便捷只不过是有人在看不见的地方帮你承担了成本;而ConvenantSQL与这里的云略有不同, 整个数据库运行在在一个比公有云更公有云的系统之上(事实上, 每个人都可以成为这个系统的一个节点),因此, 数据库是完全无中心的,在节点数足够多时,即使ConvenantSQL的母公司出现问题,数据库上的数据服务依然还能保持可用。
历史记录不可篡改:由于每个操作都存储在基于算力的区块链系统上,在ConvenantSQL中进行的所有操作一旦确认,即可保证无法被篡改。假想一下,我们基于这种数据库开发了一套资产管理应用,那每笔资金的交易记录将清晰地进行记录,不管是厉害的黑客,还是这个应用的开发者,负责公司运营的老板,都无法将其篡改。
低成本:因为系统全部去中心化,每个人的个人电脑都可以成为系统的一个运行节点,充分利用了整个互联网中的计算与存储能力,这种众包的方式比公有云集中托管的方式更有利于降低平均成本,因此,从结果上来看,更可靠的服务,反而有了更低的价格。
安全:数据库的数据和传输使用区块链共识协议进行加密,加密算法基于算力,传统的攻击方式无法攻破,保证了系统中数据的安全性。
除此之外,ConvenantSQL 兼容主流SQL语法,功能上有不少可以使用的地方,性能上没有测过,不知道怎样,简单用了一下,这里写一下使用的过程,有兴趣的同学可以了解下。
上手指南
1. 下载基本工具
从ConvenantSQL的github页面 https://github.com/CovenantSQL/CovenantSQL 选择下载新版本的ConvenantSQL工具,有Linux和mac两种发行版本可以直接使用,如果有其他发行版的需求,可以自行下载源码进行编译。
我自己的机器是mac系统,所以下载0.0.2的osx版本,下载下来是个tar.gz包,解开之后是个bin目录,里面有这些文件:
我们先收好,待会会用到里面的内容。
2. 连接网络, 生成公私钥
使用cql-utils
生成配置文件连接数据库区块链所在的网络。
执行
./cql-utils -tool confgen
输出结果如下:
非常简单,公钥和私钥就生成完成了,公钥打印到屏幕上,私钥写到了配置文件里。
3. 生成钱包地址
ConvenantSQL基于区块链钱包,因此需要生成一个钱包地址。
执行
./cql-utils -tool addrgen -private ./conf/private.key
输出结果如下:
钱包地址生成完成。
4. 领Token,查看自己的钱包余额
执行
./cql -config conf/config.yaml -get-balance
输出如下:
嗯,没有一毛钱,可以来测试网领测试用的Token,现在是免费领的,不知道后面会不会升值……而且,还是的go语言编写的客户端,貌似不领也能用数据库……
到此为止,我们的基础建设就完成了,接下来,就可以在区块链网络中创建和使用数据库了。
5. 创建数据库
执行
./cql -config conf/config.yaml -create 1
创建数据库节点,输出如下:
这里的1指的是为数据库创建一个节点,返回的类似 covenantsql://******* 的这个字符串,就是在这个网络中的数据库地址,在后续的使用过程中,就是使用这个地址进行数据的增删改查。
6. 增删改查数据
目前来说,对数据库的增删改查,还需要借助代码实现,命令行工具还不行,官网提供了go语言的SDK来完成这些事情,我们来简单操作下。
参考地址是: https://github.com/CovenantSQL/CovenantSQL/blob/develop/client/README.md
新建一个目录cli,创建main.go,代码块如下:
package mainimport ( "database/sql" "flag" "fmt" "github.com/CovenantSQL/CovenantSQL/client" log "github.com/sirupsen/logrus")func main() { log.SetLevel(log.InfoLevel) var config, password, dsn string flag.StringVar(&config, "config", "./conf/config.yaml", "config file path") flag.StringVar(&dsn, "dsn", "", "database url") flag.StringVar(&password, "password", "", "master key password for covenantsql") flag.Parse() err := client.Init(config, []byte(password)) if err != nil { log.Fatal(err) } db, err := sql.Open("covenantsql", dsn) if err != nil { log.Fatal(err) } log.INFO(db) _, err = db.Exec("DROP TABLE IF EXISTS testSimple;") if err != nil { log.Fatal(err) } _, err = db.Exec("CREATE TABLE testSimple ( indexedColumn, nonIndexedColumn );") if err != nil { log.Fatal(err) } _, err = db.Exec("CREATE INDEX testIndexedColumn ON testSimple ( indexedColumn );") if err != nil { log.Fatal(err) } _, err = db.Exec("INSERT INTO testSimple VALUES(?, ?);", 4, 400) if err != nil { log.Fatal(err) } row := db.QueryRow("SELECT nonIndexedColumn FROM testSimple LIMIT 1;") var result int err = row.Scan(&result) if err != nil { log.Fatal(err) } fmt.Printf("SELECT nonIndexedColumn FROM testSimple LIMIT 1; result %d\n", result) err = db.Close()}
编译运行一下,看看输出:
[ConvenantSQL@mac cli]$ go get github.com/sirupsen/logrus[ConvenantSQL@mac cli]$ go get github.com/CovenantSQL/CovenantSQL/client[ConvenantSQL@mac cli]$ go versiongo version go1.11.1 darwin/amd64[ConvenantSQL@mac cli]$ go build main.go[ConvenantSQL@mac bin]$ ./main --helpUsage of ./main: -config string config file path (default "./conf/config.yaml") -dsn string database url -password string master key password for covenantsql[ConvenantSQL@mac bin]$ ./main --dsn covenantsql://***************************************SELECT nonIndexedColumn FROM testSimple LIMIT 1; result 400
编译的时候,需要注意Golang的版本要在1.11版本,否则有些库依赖没有。
到此为止,完成了对CovenantSQL数据库的基本使用,接下来,就可以在业务中直接使用接口进行数据读写了。
测试网
以上的所有操作都是在测试网络中运行的,可以用来体验一下功能,不能直接用到生产场景。
后记
SDK上现在有Golang Python JavaScript和Java四种,一般的场景还是能满足的。
虽然技术上是基于公有链的数据库,现在直接让普通用户当做矿工提供服务的应用还没有,如果到时候能发出来,那家里有闲置路由器和硬盘的同学可以试用一下,数据库服务的附加值要比当做P2P盗版下载节点可能要大一些。
来源 https://www.modb.pro/db/190841
相关文章