1 个不稳定版本
0.1.0 | 2022年5月7日 |
---|
#271 在 缓存 中
25KB
392 行
mmap-cache
一个用于只读键值存储内存映射缓存的低级API。
设计
Cache
索引是一个fst::Map
,它将任意字节序列映射到[u64]。我们使用[u64]作为存储任意值内存映射文件的字节偏移。这个只读缓存非常紧凑且易于构建,只需要常量内存来序列化任意大的映射。
通过使用[fst] crate中的有限状态转换器,我们获得一个高度压缩的映射,其key --> 偏移量查找时间复杂度为O(key长度)。
示例
use mmap_cache::{FileBuilder, MmapCache};
const INDEX_PATH: &str = "/tmp/mmap_cache_index";
const VALUES_PATH: &str = "/tmp/mmap_cache_values";
// Serialize to files. As required by the finite state transducer (FST) builder,
// keys must be provided in sorted (lexicographical) order.
let mut builder = FileBuilder::create_files(INDEX_PATH, VALUES_PATH)?;
builder.insert(b"abc", b"def")?;
builder.insert(b"foo", b"bar")?;
builder.finish()?;
// Map the files into memory.
let cache = unsafe { MmapCache::map_paths(INDEX_PATH, VALUES_PATH) }?;
let value = unsafe { cache.get_transmuted_value(b"foo") };
assert_eq!(value, Some(b"bar"));
IO并发
当在大型文件上使用memmap2
时,访问缓存中的值可能会使线程在操作系统调度程序中阻塞,直到从文件系统填充页面缓存。为了达到某些最大并发N的并发IO,您可以在N线程的线程池中调度您的IO。
许可证:MIT OR Apache 2.0
依赖项
~1.5MB