谈 Project Voldemort
版权声明: 允许非商业性转载,但转载时必须标明原作者 fcicq、原始链接 http://www.fcicq.net/wp/?p=745 及本声明。
1 关于 Index:
对非树结构的数据查询, 不要用二分查找.
对于不需要修改数据的 Index File, 使用 CDB, 24 bytes (override) per item.
如果还想快就用内存 Hash Table, 对于大小远小于内存的索引来说怎么搞都差不多.
2 Data File:
[ Size ] 可以放在 Data File 中, 但需要推荐的做法是
(1) Offset (Location) + Size 存储在 CDB / Memory. (Index)
正常方法, 先从磁盘上读 Size, 这里隐式使用了 Kernel Readahead.
—没有看代码, 如果不是用下面的方法的话, 上面这句就说中了.
而显式使用 mmap / sendfile (), 因为文件, offset, size 均已知, 可以节省一次磁盘寻道 (SSD 不明显).
—你可能会说, 把 Index 中的下一条也读进来, 两个 offset 经过简单运算不就是 size 吗?
如果可行 & 不会有太大性能损失, 倒也是可以接受的.
(2) 如果没有数据恢复的需求, 去掉 Data File 中的 Size 字段.
(留着倒是也无妨, 如果非二进制数据居多的话也有一定的恢复作用, 应该用不上)
3 目标?
Worker 定位 —这是架构问题. 略
类似 memcached 的内存缓存 O(1). 命中则直接返回.
索引查询 O(1), 倾向于内存.
磁盘开 O_DIRECT, 一次磁盘查询.
(如果不用传统文件系统, 直接块操作则更好)
Reference & Thanks to:
LinkedIn Voldemort 简单介绍
友情提示: 请注意文章的时效性与准确性, 作者不对文章的有效性负责.
Tags:
Permalink Bookmark on del.icio.us
Last Modified: June 24, 2009 at 6:10 pm