Giter Site home page Giter Site logo

lightchain's Introduction

lightchain

变动

由于是一个db,只是引入了一部分blockchain的机制,所以把名字统一一下吧

lightdb.lib 对rocksdb的本地化封装,简化暂时用不到的接口,加上数据类型,最后写入高度这些信息,支持table的概念,一个库里存多份不同的字典

lightdb.server 数据库服务器,websockets连接

lightdb.sdk 供客户端连接服务器用的帮助类库

httpserver 服务器模块

lightdb.testclient 一个数据库示例

lightchain 是什么

由于最近从事区块链方面的工作

目前和多个区块链组织有染,有一些基础的工作,放在哪个组织的仓库里都似有不妥。 索性放在我的私有仓库里开源,谁想fork就fork,以解决这些基础工作的归属问题。

lightchain意欲打造一个轻量化的区块链,主要作为数据库使用。

lightchain 受了很多NEO的影响,有一些相似的地方是肯定的。

但在源码上不会直接copy Neo的代码,如使用第三方库均会以nuget的形式引用。

lightchain 的特点

1.快照

因为数据库的公用属性,一定存在着一个需求读取,另外的需求要写入的情况, 快照就是为了避免此种情况下的数据不一致性。

我做个快照开始读取,此时小张的口袋有5块。我开始读,别人不停的给小张口袋塞钱。

但是我都是从快照里读取的,无论他们怎么塞,我读取到的都是5块。

一般的数据库,快照需要额外开销,而leveldb是特别的,他使用的LSM算法使得快照没有任何额外开销

lightchain使用rocksdb 作为数据仓库,rocksdb是facebook基于leveldb开发的,同样提供快照的支持。

2.数据类型

leveldb rocksdb 都是纯粹的读写数据块,也就是说都是byte[]

lightchain 会提供丰富的类型支持,如定长的数值类型,biginteger,byte[],string,bool

让使用和观察都更容易,不用猜测数据类型

3.读写分离、集群免配置

为了性能,lightchain同样使用读写分离设计,主节点负责写入,

从节点找主节点获取数据,负责应付大量的读取。

主从节点之间采用P2P连接,无需配置,任意打开一个从节点组网即可。

主从节点数据相同,主节点down机,可以将任意从节点作为主节点快速恢复。

至于采用多个主节点来共识,以提高系统稳定性,这个暂时还没有考虑。

4.快速节点同步

一个新开的从节点 找 其他节点同步数据总是很慢,比如NEO同步数据。

会研发一些独特的技术,保证新的从节点快速可用。

主要是

1.设置检查点,允许从节点读一个自己不确定的数据时向已有此数据的节点询问

检查点是数据一份额外的复制

比如,每1000块设置一个检查点,可以向任意一个已完全同步的节点询问

比如询问一个数据 在1000块时的值、2000块时的值

那么就意味着 一个 节点自己没同步完全时,可以向其他节点询问检查点时刻的值。

虽然不是所有的请求都是检查点时刻的,但是一个节点可以从最近的检查点开始同步,只需要同步最多两个检查点间隔的值,就可以 提供最新数据的服务了。

2.支持乱序同步

一般的区块链系统同步都是由前至后的,那是因为同步了太多的状态, 而我们将系统的范围压缩到数据,对任意数据来说,总是时刻较晚的值覆盖时刻较早的值。 只要将“被删除”作为一个值,再带上时刻,所有的数据我们可以以任意顺序同步。采用较晚的那一个就可以了。

这可以让一个节点比如从101000块开始快速同步到最新的,他为了尽快成为一个完整信息的节点。 可以从101000块向前同步(倒序同步),当然也可以比如分成10段一起同步,正序倒序均可。

但是因为访问的数据是从快照时间最近的值,正序同步得到的值未必是最新的,还是要从最近检查点确认一下。 倒序同步是最有效率的方式。

lightchain's People

Contributors

lightszero avatar vincentopensource avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.