CandyStore:高速持久化键值存储的纯Rust实现

CandyStore:高速持久化键值存储的纯Rust实现

candystore A very fast Key-Value store in pure rust candystore 项目地址: https://gitcode.com/gh_mirrors/ca/candystore

项目介绍

CandyStore 是一个基于纯 Rust 编写的快速、持久的进程内键值存储库。它采用了一种创新的分片算法,实现了高效的键值对管理和数据持久化。CandyStore 的设计目标是提供极低的内存占用(约0.6%的内存开销)、无限制的合并操作、无需写前日志(WAL)或日记账,同时保证进程崩溃安全。

项目技术分析

CandyStore 的核心是一个类似于哈希表的存储结构,它将键通过哈希函数映射到64位数字。其中,最高16位用于选择分片(shard),接下来16位用于选择该分片内的行(row),最后32位作为不透明的签名。这种设计使得数据访问高效且易于扩展。

每个分片映射到一个分片文件,当分片文件过大或其中一行过满时,会进行拆分操作。拆分会将所有条目分为上下两半,分别存储在两个新的分片文件中。这种分片和拆分机制能够有效地构建一个分片文件树,且每个文件都是独立拆分的。

CandyStore 采用了内存映射(mmap)来存储分片文件的头部信息,包括行、签名和文件偏移量。数据部分则使用 preadpwrite 进行访问。文件仅在扩展时修改,直到发生拆分或压缩操作,从而保证了崩溃安全性。

项目依赖操作系统内核的页面缓存,假设 mmap 和写入操作会定期刷新到磁盘,从而避免了写前日志的需要。

项目技术应用场景

CandyStore 适用于需要高速、低内存开销的键值存储场景,如:

  • 缓存系统
  • 分布式数据库的底层存储
  • 实时数据流处理
  • 高性能计算

其设计允许它在写密集和读密集的工作负载下都能表现出色,同时支持多线程并发访问。

项目特点

  1. 高效性能:CandyStore 提供了极快的查找、插入和删除操作,均小于1微秒。
  2. 低内存开销:项目内存开销极低,约为0.6%,使得存储更加高效。
  3. 进程崩溃安全:即使进程崩溃,也不会导致数据不一致,最多丢失未刷新的数据。
  4. 无需写前日志:省去了写前日志的开销,提高了性能。
  5. 无全局锁定:分片间的拆分和压缩操作无需全局锁定,提升了并发性能。
  6. 适用SSD存储:针对 SSD 进行优化,未针对 HDD 优化。

以下是一个简单的使用示例:

use candystore::{Config, Result, CandyStore};

let db = CandyStore::open("/tmp/candy-dir", Config::default())?;

db.insert("mykey", "myval")?;
assert_eq!(db.get("mykey")?, Some("myval".into()));

assert_eq!(db.get("yourkey")?, None);

assert_eq!(db.iter().count(), 1);

for res in db.iter() {
    let (k, v) = res?;
    assert_eq!(k, "mykey".into());
    assert_eq!(v, "myval".into());
}

CandyStore 的设计理念和实现使其成为需要高速、持久化键值存储的 Rust 项目的理想选择。通过其高效的算法和数据结构,CandyStore 能够为开发者提供卓越的性能和可靠性。

candystore A very fast Key-Value store in pure rust candystore 项目地址: https://gitcode.com/gh_mirrors/ca/candystore

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴洵珠Gerald

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值