4 个版本
新版本 0.1.3 | 2024 年 8 月 19 日 |
---|---|
0.1.2 | 2024 年 8 月 15 日 |
0.1.1 | 2024 年 8 月 14 日 |
0.1.0 | 2024 年 8 月 14 日 |
86 在 压缩 中排名
每月 384 次下载
300KB
7K SLoC
简介
SlateDB 是一个作为 日志结构合并树 构建的嵌入式存储引擎。与传统的 LSM-tree 存储引擎不同,SlateDB 将数据写入对象存储(S3、GCS、ABS、MinIO、Tigris 等)。利用对象存储使 SlateDB 能够提供无限的存储容量、高可靠性和易于复制。代价是对象存储的延迟和 API 成本高于本地磁盘。
为了减轻高写入 API 成本(PUTs),SlateDB 批量写入。不是将每个 put()
调用写入对象存储,而是将 MemTables 定期作为字符串排序的表(SST)刷新到对象存储。刷新间隔可配置。
为了减轻写入延迟,SlateDB 提供了一个异步 put
方法。希望获得强持久性的客户端可以在 put
上 await
,直到 MemTable 刷新到对象存储(以延迟换取持久性)。希望获得低延迟的客户端可以简单地忽略 put
返回的未来。
为了减轻读取延迟和读取 API 成本(GETs),SlateDB 将使用标准的 LSM-tree 缓存技术:内存块缓存、压缩、布隆过滤器以及本地 SST 磁盘缓存。
访问 slatedb.io 了解更多信息。
入门
将以下内容添加到您的 Cargo.toml
中以使用 SlateDB
[dependencies]
slatedb = "*"
然后您可以在 Rust 代码中使用 SlateDB
use bytes::Bytes;
use object_store::{ObjectStore, memory::InMemory, path::Path};
use slatedb::db::Db;
use slatedb::config::{CompactorOptions, DbOptions};
use std::{sync::Arc, time::Duration};
#[tokio::main]
async fn main() {
// Setup
let object_store: Arc<dyn ObjectStore> = Arc::new(InMemory::new());
let options = DbOptions {
flush_ms: 100,
manifest_poll_interval: Duration::from_millis(100),
min_filter_keys: 10,
l0_sst_size_bytes: 128,
compactor_options: Some(CompactorOptions::default()),
compression_codec: None,
};
let kv_store = Db::open_with_opts(
Path::from("/tmp/test_kv_store"),
options,
object_store,
)
.await
.unwrap();
// Put
let key = b"test_key";
let value = b"test_value";
kv_store.put(key, value).await;
// Get
assert_eq!(
kv_store.get(key).await.unwrap(),
Some(Bytes::from_static(value))
);
// Delete
kv_store.delete(key).await;
assert!(kv_store.get(key).await.unwrap().is_none());
// Close
kv_store.close().await.unwrap();
}
SlateDB 使用 object_store
包与对象存储交互,因此支持任何实现了 ObjectStore
特性的对象存储。
文档
访问 slatedb.io 了解更多信息。
特性
SlateDB 目前处于开发初期。它尚未准备好用于生产。
- 基本 API(获取、写入、删除)
- 对象存储上的 SSTs
- 范围查询 (#8)
- 块缓存 (#15)
- 磁盘缓存 (#9)
- 压缩 (#10)
- 布隆过滤器 (#11)
- 清单持久化 (#14)
- 压缩 (#7)
- 事务
许可证
SlateDB 采用 Apache 许可证 2.0 版本。
依赖项
~9–20MB
~278K SLoC