Golang比较成熟的嵌入式B树数据库

C 2月前 745

最近一直在研究技术选型,调查出一些结果。

因为我的应用需要大量随机读,所以用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


硬盘+缓存

很成熟的解决方案了,可以在硬盘存储大量数据,并按需缓存到内存。

PocketBasehttps://github.com/pocketbase/pocketbase

这是一个带图形管理界面的SQLite,Golang版本已经封装好了,基于cznic编写的无CGO版本SQLite。

modernc.org/sqlitehttps://pkg.go.dev/modernc.org/sqlite

比较底层的SQLite实现,可以配合Golang官方的sql接口。


硬盘+内存

将数据全部写入内存,并写入硬盘做持久化。

bbolthttps://pkg.go.dev/go.etcd.io/bbolt

优点是读取速度快,缺点是内存占用大。

当内存不够时,会使用交换区,造成性能下降。

buntdbhttps://github.com/tidwall/buntdb

对tidwall内存btree的封装,支持创建索引等功能。

硬盘持久化使用写Log实现,文件大且压缩速度慢。


纯硬盘

只在硬盘中创建B树,除了读写外不占用内存。

modernc.org/kvhttps://pkg.go.dev/modernc.org/kv

cznic作品,适合没什么读取的纯硬盘数据库。


纯内存

在内存中创建B树,不保存在硬盘,重启后数据消失。

google/btreehttps://github.com/google/btree

谷歌官方出品的B树,稳健可靠。

modernc.org/bhttps://pkg.go.dev/modernc.org/b

cznic写的内存B+树实现。

tidwall/btreehttps://github.com/tidwall/btree

支持多种数据结构,读写速度都很快。

最新回复 (0)
    • 屌丝论坛
      2