20. 索引的持久化系统 —— Feed Index DB 需要解决的难题 数万级的每秒写入 每秒几千次的随机读 每天 100G+ 的新增索引数据
21. 索引的持久化系统 —— Feed Index DB 解决思路 常规办法对于每秒几万次的写入,除了堆几十或上百台机器,别无它法。测试结果:做 Raid5 的机器,在完全随机写的情况下, IOPS 也就能到 800+ 如果我们将随机写改为顺序写文件,写入效率会高出很多 需要充分的利用内存,在内存中将写入的随机索引进行整理和积攒,再顺序的写入硬盘 由于使用了延迟写入内存的方式,需要在 Log 中记录所有操作,方便出问题时能找回内存中的数据 使用异步 Direct IO ,不要让 OS 多管闲事,浪费内存 选用更牛 B 的硬盘,我们用的是 SSD
22. 索引的持久化系统 —— Feed Index DB 解决方案 合并写操作 通过 Log 保证 Down 机后数据恢复 使用 TT 保存索引 使用异步 IO 读写文件 使用 Direct IO 屏蔽 OS 的 Cache 策略 使用 SSD 解决大量的并发读取
23. 索引的持久化系统 —— Feed Index DB 结构 Index Node 责任存储 UserID 到 最新一块 Data Block 的位置信息 使用 Tokyo Tyrant 保存 key-value 对应关系 因为数据量很小,所以 TT 很好用 Data Node 异步的 Direct IO 每个用户可以分配 N 个 Block ,每个 Block 占 2K 大小, N 个 Block 首尾相连,很像一个单向链表
26. 想 了解更多有趣内容,欢迎加入我们的开发团队 我们正在努力做好的事情 Feed System (新鲜事系统) IM Server (人人桌面服务器端) Ad Engine (广告引擎系统) 感兴趣的快来报名 Linux C++ 开发工程师( 3~5 人) Email : [email_address] [email_address]