SlideShare une entreprise Scribd logo
1  sur  42
微博实时搜索
xuanxi@mogujie.com
      汪亚军
简介


于我

菇街搜索

实时搜索场景
大纲

近实时搜索

  菇街实时搜索

JAVA并发编程

Jessica 2.0

Q&A
Lucene segment
    segment 1 segment 2 segment 3



 Map
                           mergepolicy
Reduce




               segment
Lucene 近实时搜索

IndexWriter.setRAMBufferSizeMB() 设置ram
buffer大小 LUCENE-843

IndexWriter.getReader() 将ram buffer刷回
RamDir 但不Commit LUCENE-1516

LUCENE-843(性能) VS LUCENE-1516(实时)
Zoie


由linkedin   发并   源

提供一个在lucene之上的封装保证实时性

快速doci<=>uid双向对应方案
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合并
Zoie

RAM Rebuild 也有消耗 不能常做 (无法实时)

RAM变动 DISK Cache不会发送改变 数据重

DISK Rebuild 无cache. fav:{ 100 to 1000} 查
询是个灾难
Lucene查询快!?
Lucene查询不           快


实时搜索意味着缓存常常失效

没有term截断机制 也没有终端机制

10万结果集耗时100ms 或者更糟
结论


为了实时搜索,常常刷新创建的segment,不可取

实时系统,缓存常常失效,这样我们没有办法在短
时间内,遍历所有的docId
解决办法


可增量的倒排索引

从新向旧遍历的倒排索引

可中断的查询
可增量倒排索引

term 字典

词频

text

PostingList
TermInfo
      textpointer frequency startPostingsPotine   endPostingsPotiner
a                                    r

b
c                                           parralle
d                                          int arrays
...
...          Term
x
             字典
y
z
PostingList
      textpointer frequency startPostingsPotiner endPostingsPotiner
a
b
c
d
...
...
x
y
z

                        PostingList
查询PostingList
      textpointer frequency startPostingsPotiner endPostingsPotiner
a
b
c
d
...
...
x                        从新向旧遍历的倒排索引
y
z

                        PostingList
Lucene PostingInfo
不靠谱!!!
      textpointer frequency startPostingsPotiner endPostingsPotiner
a
b          lucene
c     的压缩算法无法从新向旧搜索
d
                   文档
...
...
x                        从新向旧遍历的倒排索引
y
z

                       PostingList
PostingInfo



docId

position (twitter 1-140 < 255 )
PostingInfo

docId

position (twitter 1-140 < 255 )

(docId <<8 ) | (position&0xFF)
PostingListStore


int pool(GC friendly)

auto expand

zero copy (do not like array)
PostingListStore
PostingListStore



如何连接term包含的所有片段(slice)组成一个
PostingList?
PostingListStore

  PostingListPointer
PostingListStore
单个Term的PostingList的所有Slice组成一个双向链表




                    prepointer data ...

      ...   data nextpointer
PostingListStore
单个Term的PostingList的所有Slice组成一个双向链表




                    prepointer data ...

      ...   data nextpointer


                双向链表的好处?
可增量倒排索引!
可中断查询


我们最   心最近有更新的前n条数据

从新向老查询

超时立马返回(HashedWheelTimer)
智能二分查找算法

依次从新向旧找

记录上次二分查找时候各位置数据

对当前查找做智能直到

skipList search + smart search + binary
search
总结



中断查询 + 从新查找PostingStore = 实时搜索
JAVA并发编程


writer和reader wait free(JMM)

保证reader的数据一致性(版本号)
Writer AND Reader
v = 100;

thread a write v = 101;   demo

thread b read v => 100;

数据一致性 java并不能保证a写了就立马能被b
看到

Lock Free
JAVA内存模型


happen before

volatile

memory barrier

volatile 只能保证之前写的越过内存障碍*
内存屏障



PostingStore越过内存屏障 => 从Term的
PostingList 始指针向新查找
内存屏障
单个Term的PostingList的所有Slice组成一个双向链表




                    prepointer data ...

      ...   data nextpointer

             双向链表的好处
reader 数据一致性
版本号
Jessica 2.0

去lucene化

纯内存postingListStore

从日志系统重建索引

可中断查询

存储原始数据(bitcask)
Jessica 2.0

jessica 负责索引
               jessica   monica负责打分排序


  feeder                     monica
               jessica


feeder负责分词     jessica
我们需要你

降噪

提高召回率

个性化

分布式 高并发

分词
感谢



twitter

Michael Busch
Q&A

Contenu connexe

Tendances

互联网分布式系统架构分享-Qcon2011
互联网分布式系统架构分享-Qcon2011互联网分布式系统架构分享-Qcon2011
互联网分布式系统架构分享-Qcon2011Yiwei Ma
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOpenSourceCamp
 
Linux 教育訓練
Linux 教育訓練Linux 教育訓練
Linux 教育訓練Bo-Yi Wu
 
可用空間的管理
可用空間的管理可用空間的管理
可用空間的管理倩怡 賴
 
Advanced heap exploitaion
Advanced heap exploitaionAdvanced heap exploitaion
Advanced heap exploitaionAngel Boy
 
揭秘家用路由器Ch10 sharing
揭秘家用路由器Ch10 sharing揭秘家用路由器Ch10 sharing
揭秘家用路由器Ch10 sharingYi-Jun Zheng
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developerdianming.song
 
Heap exploitation
Heap exploitationHeap exploitation
Heap exploitationAngel Boy
 
云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现 云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现 july19850903
 
Memcached分享
Memcached分享Memcached分享
Memcached分享princehaku
 
Tokyo Cabinet Key Value数据库及其扩展应用
Tokyo Cabinet  Key Value数据库及其扩展应用Tokyo Cabinet  Key Value数据库及其扩展应用
Tokyo Cabinet Key Value数据库及其扩展应用rewinx
 
Exodus重构和向apollo迁移
Exodus重构和向apollo迁移Exodus重构和向apollo迁移
Exodus重构和向apollo迁移wang hongjiang
 
Openstack swift, how does it work?
Openstack swift, how does it work?Openstack swift, how does it work?
Openstack swift, how does it work?kao kuo-tung
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptxjames tong
 

Tendances (18)

Optimzing mysql
Optimzing mysqlOptimzing mysql
Optimzing mysql
 
互联网分布式系统架构分享-Qcon2011
互联网分布式系统架构分享-Qcon2011互联网分布式系统架构分享-Qcon2011
互联网分布式系统架构分享-Qcon2011
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresql
 
Ch7 教學
Ch7 教學Ch7 教學
Ch7 教學
 
Linux 教育訓練
Linux 教育訓練Linux 教育訓練
Linux 教育訓練
 
可用空間的管理
可用空間的管理可用空間的管理
可用空間的管理
 
Advanced heap exploitaion
Advanced heap exploitaionAdvanced heap exploitaion
Advanced heap exploitaion
 
揭秘家用路由器Ch10 sharing
揭秘家用路由器Ch10 sharing揭秘家用路由器Ch10 sharing
揭秘家用路由器Ch10 sharing
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developer
 
Heap exploitation
Heap exploitationHeap exploitation
Heap exploitation
 
云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现 云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现
 
Memcached分享
Memcached分享Memcached分享
Memcached分享
 
Ch12
Ch12Ch12
Ch12
 
Tokyo Cabinet Key Value数据库及其扩展应用
Tokyo Cabinet  Key Value数据库及其扩展应用Tokyo Cabinet  Key Value数据库及其扩展应用
Tokyo Cabinet Key Value数据库及其扩展应用
 
Exodus重构和向apollo迁移
Exodus重构和向apollo迁移Exodus重构和向apollo迁移
Exodus重构和向apollo迁移
 
Openstack swift, how does it work?
Openstack swift, how does it work?Openstack swift, how does it work?
Openstack swift, how does it work?
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx
 
Ch12 教學
Ch12 教學Ch12 教學
Ch12 教學
 

Similaire à 微博实时搜索

Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.pptjames tong
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享Chong-Kuan Chen
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践孙立
 
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南HonestQiao
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 zhen chen
 
Fast flux domain detection
Fast flux domain detectionFast flux domain detection
Fast flux domain detectionNi Zhiqiang
 
Python速成指南
Python速成指南Python速成指南
Python速成指南March Liu
 
Simple tech-talk
Simple tech-talkSimple tech-talk
Simple tech-talkliltos
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)ykdsg
 
Nosql及其主要产品简介
Nosql及其主要产品简介Nosql及其主要产品简介
Nosql及其主要产品简介振林 谭
 
我对后端优化的一点想法
我对后端优化的一点想法我对后端优化的一点想法
我对后端优化的一点想法mysqlops
 
C++工程实践
C++工程实践C++工程实践
C++工程实践Shuo Chen
 
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509tidesq
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
R 語言教學: 探索性資料分析與文字探勘初探
R 語言教學: 探索性資料分析與文字探勘初探R 語言教學: 探索性資料分析與文字探勘初探
R 語言教學: 探索性資料分析與文字探勘初探Sean Yu
 
Dreaming Infrastructure
Dreaming InfrastructureDreaming Infrastructure
Dreaming Infrastructurekyhpudding
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析George Ang
 

Similaire à 微博实时搜索 (20)

Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.ppt
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
 
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
Fast flux domain detection
Fast flux domain detectionFast flux domain detection
Fast flux domain detection
 
Python速成指南
Python速成指南Python速成指南
Python速成指南
 
Simple tech-talk
Simple tech-talkSimple tech-talk
Simple tech-talk
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
Jvm内存管理基础
Jvm内存管理基础Jvm内存管理基础
Jvm内存管理基础
 
Nosql及其主要产品简介
Nosql及其主要产品简介Nosql及其主要产品简介
Nosql及其主要产品简介
 
我对后端优化的一点想法
我对后端优化的一点想法我对后端优化的一点想法
我对后端优化的一点想法
 
C++工程实践
C++工程实践C++工程实践
C++工程实践
 
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
R 語言教學: 探索性資料分析與文字探勘初探
R 語言教學: 探索性資料分析與文字探勘初探R 語言教學: 探索性資料分析與文字探勘初探
R 語言教學: 探索性資料分析與文字探勘初探
 
Dreaming Infrastructure
Dreaming InfrastructureDreaming Infrastructure
Dreaming Infrastructure
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析
 

微博实时搜索

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n