微博实时搜索4. Lucene segment
segment 1 segment 2 segment 3
Map
mergepolicy
Reduce
segment
7. Zoie
Mem A + Disk Mem A + new Disk
1,Mem A 添加文档立刻更新的 1,Mem A 添加文档立刻更新的
2,Disk在下次合并之前,一直使用 2, 使用前面Mem A和Disk合并好
的 new Disk
Mem A +Mem B+ Disk
1,Mem B 添加文档立刻更新的
2,Mem A 只读 与Disk合并
2,Disk 无变化 与Mem A合并
8. Zoie
RAM Rebuild 也有消耗 不能常做 (无法实时)
RAM变动 DISK Cache不会发送改变 数据重
DISK Rebuild 无cache. fav:{ 100 to 1000} 查
询是个灾难
10. Lucene查询不 快
实时搜索意味着缓存常常失效
没有term截断机制 也没有终端机制
10万结果集耗时100ms 或者更糟
14. TermInfo
textpointer frequency startPostingsPotine endPostingsPotiner
a r
b
c parralle
d int arrays
...
... Term
x
字典
y
z
15. PostingList
textpointer frequency startPostingsPotiner endPostingsPotiner
a
b
c
d
...
...
x
y
z
PostingList
16. 查询PostingList
textpointer frequency startPostingsPotiner endPostingsPotiner
a
b
c
d
...
...
x 从新向旧遍历的倒排索引
y
z
PostingList
18. 不靠谱!!!
textpointer frequency startPostingsPotiner endPostingsPotiner
a
b lucene
c 的压缩算法无法从新向旧搜索
d
文档
...
...
x 从新向旧遍历的倒排索引
y
z
PostingList
28. 可中断查询
我们最 心最近有更新的前n条数据
从新向老查询
超时立马返回(HashedWheelTimer)
32. Writer AND Reader
v = 100;
thread a write v = 101; demo
thread b read v => 100;
数据一致性 java并不能保证a写了就立马能被b
看到
Lock Free
Editor's Notes \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n