EOS系列 - EOS的数据库 - chainbase 内存映射文件

ChainBase-快速版本控制的事务性数据库

特征

  • 支持具有多个索引的多个对象(表) (基于boost :: multi_index_container)
  • 状态在多个过程之间是持久且可共享的
  • 具有撤销更改功能的嵌套事务写入

并发访问

默认情况下,ChainBase不提供任何同步,并具有与任何boost :: multi_index_container相同的并发限制。这意味着两个或多个线程可以同时读取数据库,但是所有写操作必须由互斥锁保护。

如果注意在数据库上使用进程间锁定,则多个进程可能会打开同一数据库。

##持久性

默认情况下,仅在请求或程序退出时才将数据刷新到磁盘。只要程序在调用db.modify()db.create()的过程中不会崩溃,数据库的内容就应保持一致状态。这意味着您应最大程度地减少用于 创建 和(或) 修改 状态的lambda的复杂性。

如果操作系统崩溃或计算机掉电,则数据库将处于不确定状态,具体取决于操作系统能够将哪些内存页面同步到磁盘。

ChainBase设计用于与区块链应用程序一起使用,在区块链应用程序中,区块的日志可用于在断电时保护状态。可以重播此块日志以重新生成完整的数据库状态。

与其它区块链数据库比较

区块链应用程序依赖于每秒能够进行数百万次读/写操作的高性能数据库。 另外,区块链在“最终一致性”的基础上运行,这意味着根据所使用的共识协议,对数据库所做的任何更改都可能在未知的时间内被逆转。

例如比特币使用的libbitcoin数据库,使用类似的技术(内存映射文件)可实现较高的性能,但它无法实现多个索引 或 撤消历史记录。

例如以太坊使用的LevelDB数据库, 它提供了一个简单的键/值数据库,但是相对于内存映射文件实现而言,性能较差。

猜你喜欢

转载自blog.csdn.net/wcc19840827/article/details/113243826
eos
今日推荐