Golang比较成熟的嵌入式B树数据库 最近一直在 - Assbbs

Golang比较成熟的嵌入式B树数据库 最近一直在研究技术选型,调查出一些结果。 因为我的应用需要大量随机读,所以用B树。 LSM解决方案有很多,在此一笔带过: LSM https://github.com/cockroachdb/pebble LSM https://github.com/dgraph-io/badger LSM https://githu…

Golang比较成熟的嵌入式B树数据库 最近一直在研究技术选型,调查出一些结果。 因为我的应用需要大量随机读,所以用B树。 LSM解决方案有很多,在此一笔带过: LSM https://github.com/cockroachdb/pebble LSM https://github.com/dgraph-io/badger LSM https://github.com/nutsdb/nutsdb Vector https://github.com/milvus-io/milvus 硬盘+缓存 很成熟的解决方案了,可以在硬盘存储大量数据,并按需缓存到内存。 PocketBase : https://github.com/pocketbase/pocketbase 这是一个带图形管理界面的SQLite,Golang版本已经封装好了,基于cznic编写的无CGO版本SQLite。 modernc.org/sqlite : https://pkg.go.dev/modernc.org/sqlite 比较底层的SQLite实现,可以配合Golang官方的sql接口。 硬盘+内存 将数据全部写入内存,并写入硬盘做持久化。 bbolt : https://pkg.go.dev/go.etcd.io/bbolt 优点是读取速度快,缺点是内存占用大。 当内存不够时,会使用交换区,造成性能下降。 buntdb : https://github.com/tidwall/buntdb 对tidwall内存btree的封装,支持创建索引等功能。 硬盘持久化使用写Log实现,文件大且压缩速度慢。 纯硬盘 只在硬盘中创建B树,除了读写外不占用内存。 modernc.org/kv : https://pkg.go.dev/modernc.org/kv cznic作品,适合没什么读取的纯硬盘数据库。 纯内存 在内存中创建B树,不保存在硬盘,重启后数据消失。 google/btree : https://github.com/google/btree 谷歌官方出品的B树,稳健可靠。 modernc.org/b : https://pkg.go.dev/modernc.org/b cznic写的内存B+树实现。 tidwall/btree : https://github.com/tidwall/btree 支持多种数据结构,读写速度都很快。