1. 随机存储引擎
这里推荐阅读豆瓣的beansdb代码和参考这篇论文:《A Log-Structured Hash Table for Fast Key/Value Data》数据读取流程如下:
用户指定key之后,根据hash能够计算出该key所在的文件file_id和key在该文件中的偏移量value_pos,通过一次IO操作即可完成数据读取。
数据写入时,首先写入log,之后生成kv对,放入到写缓存中去,修改hash表。
数据删除,仅仅是标记删除,实际数据删除是在compact中完成的。
2. Merge-dump存储引擎
这里就和google bigtable论文中实现类似,代码可以参考leveldb的实现。http://blog.csdn.net/column/details/leveldb.html
总之两者在实现思路上都是:
1. 将随即的IO操作转换成顺序的IO操作
2. 维护索引数据结构加速查询,例如beansdb中使用内存hash,leveldb中使用skiplist的形式。