设计一个带外部存储的 KV 存储
需求
- 数据大小:值的数据大小过大,无法保存在内存中,我们应该利用外部存储来存储它们。然而,我们仍然可以将数据键保存在内存中。
- 单主机解决方案。没有分布式设计。
- 优化写入。
解决方案
- 内存哈希表索引 + 索引提示文件 + 数据文件
- 仅追加以优化写入。仅有一个活动数据文件用于写入。并将活动数据压缩到旧的数据文件中以供读取。
组件
-
内存中的
HashMap<Key, <FildId, ValueOffset, ValueSize, Timestamp>>
-
数据文件布局
|crc|timestamp|key_size|value_size|key|value|
...
- (索引)提示文件,内存哈希表可以从中恢复