1. Tugraph
Tugraph是一款开源的性能优秀的图数据库,该图数据库使用多版本的B+Tree作为数据的存储引擎,同时设置了点边数据在这个存储引擎上的布局(主要考虑数据的局部性),从而达到高性能查询的目的。本文主要从Tugraph使用的存储引擎和Tugraph的设计角度进行一些分析。TuGraph的源码仓库:GitHub - TuGraph-family/tugraph-db: TuGraph is a high performance graph database.
2. LMDB
2.1 LMDB的特点:
优点:
- 基于B+树的key/value存储
- 支持事务(ACID),隔离界别为Serializable
- 支持多版本控制,读操作不会阻塞写操作
- 使用memory-mapped映射文件,不需要调整cache的参数,冲突重启不需要恢复数据
- 使用CacheLine对齐的数据结构,对CPU的缓存友好
- 支持并发操作,支持多进程或者多线程,Writer不会阻塞Reader,同样Reader不会阻塞Writer
- 在多CPU机器上读操作可以实现真正的线性扩展,没有死锁的问题
- 完全隔离的多版本并发(实现中两个版本),Serializable的隔离等级,可以实现事务的嵌套(Tugraph没有实现事务的嵌套)
- 可以批量写
- 使用Copy-on-Write,数据不会被覆盖,只会Append写入,两个版本保证旧数据会空间会被回收复用;
- 无需WAL,DB崩溃后无需恢复,没有commit的数据视为无效数据无需恢复
- 使用单级存储(Single-Level Store)
- 读操作直接饮用MMAP指针,没有数据拷贝开销
- 写操作直接写入MMAP映射到磁盘,没有buffer,也不需要buff的调参。依赖于OS的pageCache,在应用层没有cache的浪费
缺点:
- 任意时刻只能一个线程写数据
- 对于长时间事务来说&#x