NEL发布NEO Key-Value数据库LightDB

2018-11-26 16:43 栏目:经验之谈 来源: 查看()
项目组成

这个项目叫做LightDB

由三部分组成

Lightdb.lib是rocksdb的一个包层。主要修改是附加保存的数据类型和表的概念
https://github.com/NewEconoLab/lightdb.lib

Lightdb.server是一个远程数据库,Lightdb服务器版本
https://github.com/NewEconoLab/lightdb.server

客户端提供Lightdb.SDK来访问LightdbServer。目前,仅提供C#版本。还提供了该版本的版本。通信协议相对简单。可以连接任何支持websocket的解决方案。
https://github.com/NewEconoLab/lightdb.sdk

项目特点

说出项目的特点,

首先,添加了数据类型和表格概念。
第二,有一个服务器,使用websocket通信,对js
友好 第三,数据存储在任务块单元中,便于数据库的相互认证和同步
实际上,最重要的功能是快照的快照。快照需求的来源是数据处理的事务化,或一批操作的原子性。

传统数据库在一定程度上支持事务化,而KeyValue数据库在较小程度上支持事务化。
由于LSM存储方法,NEO,LevelDB使用的嵌入式数据库提供了非常容易读取的快照,并且成本很小。
这也导致存储部分在NEO的实现中非常依赖于Snapshot。

创建这个项目的初衷是

部分原因是将NEO的存储部分转换为网络存储,您可以使用轻量级节点直接找到网络数据库来执行InvokeScript
即将Neo节点的节点模式转换为节点和集群。
实现此目标的基础是此网络数据库需要类似的低成本读取快照支持。
所以我选择了rocksdb作为基础,而rocksdb是基于leveldb magic的改进版facebook。

那么为什么要添加数据类型和表的概念呢?

因为存储在leveldb中的东西都是byte [],并且很多时候我们使用neo中获得的byte []来知道它是什么,依赖于相应的约定。
我认为这非常不方便,因此我们存储的单元不是byte []而是结构DBValue,它可以描述它是什么数据类型,整数,字符串,byte [],bigint,decimal等等。
此结构还保留向每个值附加信息的功能,还记录此值的最终修改的时间戳(存储高度)

至于表格,可以更好地理解。这是使用leveldb的自然要求。 keyvalue数据库是一个字典,但我们存放的东西在逻辑上分为几个字典,事务字典,utxo字典等。
我们只是直接在数据库级别提供这个子字典的自然要求。

然后是网络层,并选择websocket作为通信方法,这是基于对网页未来的考虑。由于存储功能是隔离的,您甚至可以编写一个链,它完全在Web上运行。

当然,我并没有这么想,但我可以预见到越来越多的企业将在网络中运行。由于该数据库的出现,nel的至少50%的查询要求可以由没有js的后台服务器直接完成。
例如,nep5资产的blanceof,例如交易UTXO数据的确认。

第三,数据库的存储以任务块的形式模仿区块链的结构,任务块是端到端连接的。毕竟,项目开头的名称叫做lightchain。
后来,我认为名称有点不好,数据库仍称为DB。
为什么要将任务块作为一个单元使用,因为它很容易同步。数据库读写分离是性能扩展的必然趋势,每个操作都被记录下来。从数据库中,只要从主数据库获得每个块,就执行一次,并完成同步。

对,有点像NEO区块链。我们的写访问控制不是密码,而是私钥,它也是与NEO完全兼容的私钥

最后,还有一个非常重要的功能,checkpoint,它是来自rocksdb的礼物,可以在本地快速生成数据库的新副本。通过这种方式,我们有更多方法可以对链上的数据进行快照。传统方法是使用爬虫爬行要快照的数据,爬到指定的高度,然后停止。现在有另一种方法,时间快照,时间哦,检查点,整个数据库都备份。

但是,当数据量达到G级别时,此检查点的性能如何,或者需要通过测试确认。

项目使用方法

首先,打开服务器

获取lightdb.server,生成

在启动之前查看配置

NEL发布NEO Key-Value数据库LightDB

Server_port服务端口
Server_storage_path数据库存储路径
Server_type读写分离,奴隶模式尚未开发,只有Master
Storage_maindb_magic提供了一个神奇的字符串,使这个库独立
将数据库创建后写入库中,更改此值无意义

Storage_maindb_firstwriter_address提供NEO地址,他将是第一个具有写访问权限的人。事实上,他还没有发展出追加作家的功能。他是唯一一个。
将数据库创建后写入库中,更改此值无意义

然后启动服务器,支持linux windows,在win10中测试,unbutu,centos,需要在linux下安装依赖库,参考facebook rocksdb项目的描述

https://github.com/facebook/rocksdb/blob/master/INSTALL.md


中支持的平台部分

NEL发布NEO Key-Value数据库LightDB

NEL发布NEO Key-Value数据库LightDB

如果尚未在路径中创建数据库,则会创建该数据库,否则将打开

NEL发布NEO Key-Value数据库LightDB

控制台目前只有两个函数,db.state和db.block

NEL发布NEO Key-Value数据库LightDB

Db.block将解析块,我们可以看到每个块都做了一些技巧,值是DBvalue,你可以看到带有DBValue结构的类型

其次,客户使用

首先参考lightdb.sdk,你可以来源,你可以nuget

NEL发布NEO Key-Value数据库LightDB

新客户对象

NEL发布NEO Key-Value数据库LightDB

注册,断开事件,然后连接
如果连接成功,则可以。
您无需登录,可以随便阅读。当你写作时,你需要签名。
用dbstate ping

NEL发布NEO Key-Value数据库LightDB

所有读取操作都通过快照完成

NEL发布NEO Key-Value数据库LightDB

所以先来快照
然后你就可以搞定了

NEL发布NEO Key-Value数据库LightDB

Getblockhash

NEL发布NEO Key-Value数据库LightDB

Getvalue
client.Post_snapshot_getvalue(snapshotid,tableid,key);

写数据比较复杂。

NEL发布NEO Key-Value数据库LightDB

首先创建一个writetask对象,所有写入都通过writetask对象完成,
然后创建一个signdata对象并签名
然后将这两件事发布到服务器上。有一个相应的私钥来完成签名并成功写入数据。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发