twitter对存档的tweet使用lucene做全量索引,新发的推文则是实时索引,实时检索(10秒之内索引)。实时索引和检索系统叫EarlyBird。
感觉写得比较清楚简洁,只要这些信息足够真实可信,完全可以做实现参考。
我简单做了几个记录:
1)基于lucene + java,michael busch是lucene committer
2)词典直接用哈希表,因此不支持term的prefix,偏序查询,哈希表使用开放链址法实现,避免大量小对象gc开销
3)postings列表在optimize之前直接用数组,按照docid生序不压缩,因此查找可以直接二分查找不需要跳跃表结构.posting增长时分配空间以block为单位,分配空间按指数预留空间
4)12个segment11个是read-only,只有一个是可读可写的,一个segment中tweet数量超过8.4m时,segment经过optimize(不是lucene中的段合并,而是做压缩)变为read only.
5)11个只读段并发读不需要锁,唯一的可读可写段使用volatile关键字实现高效同步(jvm memory barrier)
论文地址:
http://www-users.cs.umn.edu/~gade/earlybird.pdfTwitter实时搜索系统EarlyBird,布布扣,bubuko.com
Twitter实时搜索系统EarlyBird
原文:http://blog.csdn.net/jollyjumper/article/details/29218789