5个版本
0.1.4 | 2024年4月10日 |
---|---|
0.1.3 | 2024年3月4日 |
0.1.2 | 2024年1月3日 |
0.1.1 | 2024年1月1日 |
0.1.0 | 2023年11月30日 |
#75 在 数据库实现
每月306次下载
50KB
1.5K SLoC
GhalaDb
受WiscKey论文启发的实现键值分离的关键值数据存储。
GhalaDb通过将键的存储与值的存储解耦来实现对SSD感知的数据布局。内存树存储键以及指向值的指针,而值则存储在单独的日志文件中。这显著降低了数据导入期间的写放大,同时促进了数据加载的速度。
由于GhalaDb将其所有键和数据指针都保存在内存中,因此它适用于具有小型键的应用程序。
use ghaladb::{GhalaDb, GhalaDbResult};
fn main() -> GhalaDbResult<()> {
let mut db = GhalaDb::new("/tmp/ghaladb", None)?;
let key = "king".to_owned();
let val = "queen".to_owned();
db.put(&key, &val)?;
assert_eq!(db.get(&key)?.unwrap(), val);
Ok(())
}
参考文献
- https://arxiv.org/pdf/1812.07527.pdf 基于LSM的存储技术:综述
- http://www.benstopford.com/2015/02/14/log-structured-merge-trees/ 日志结构合并树
- https://dl.acm.org/doi/pdf/10.1145/3514221.3522563 - 解构、设计和优化基于LSM的数据存储
- https://www.infoq.com/articles/API-Design-Joshua-Bloch/ Joshua Bloch:API设计口号
依赖项
~0.7–1.2MB
~27K SLoC