Tugraph的设计和源码初步解析

本文介绍了Tugraph,一款基于多版本B+Tree的高性能图数据库,详细探讨了其采用的存储引擎LMDB。LMDB以Append-only tree实现,支持多版本并发,但存在写放大的问题。Tugraph利用LMDB实现高效点边数据存储,通过GraphManager管理多图空间,提供优秀查询性能。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值