#对象存储 #存储引擎 #写入 #构建 #云原生 #更高 #读取

bin+lib slatedb

基于对象存储构建的云原生嵌入式存储引擎

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压缩 中排名

Download history 375/week @ 2024-08-13

每月 384 次下载

Apache-2.0

300KB
7K SLoC

SlateDB

Crates.io Version GitHub License slatedb.io Discord Docs

简介

SlateDB 是一个作为 日志结构合并树 构建的嵌入式存储引擎。与传统的 LSM-tree 存储引擎不同,SlateDB 将数据写入对象存储(S3、GCS、ABS、MinIO、Tigris 等)。利用对象存储使 SlateDB 能够提供无限的存储容量、高可靠性和易于复制。代价是对象存储的延迟和 API 成本高于本地磁盘。

为了减轻高写入 API 成本(PUTs),SlateDB 批量写入。不是将每个 put() 调用写入对象存储,而是将 MemTables 定期作为字符串排序的表(SST)刷新到对象存储。刷新间隔可配置。

为了减轻写入延迟,SlateDB 提供了一个异步 put 方法。希望获得强持久性的客户端可以在 putawait,直到 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