1、淺談對lucene源碼的改造超萬億規模的大數據搜索與統計作者簡介母延年作者簡介所屬公司:錄信數軟職業信息:CTO領域:互聯網、大數據十年行業經驗,曾任職新浪、酷六、阿里與騰訊。11年:支付寶黃金策的海狗 12年:阿里開源項目:MDRILL(多維分析)14年:騰訊的Hermes(每天千億總量萬億)15年:技術創業,潛心研究技術。作為lucene的粉絲,現就職于南京錄信軟件技術有限公司,錄信即lucene的發音。有數十個萬億級、幾百個千億級別的項目設計與實施經驗。我們對lucene的改進PART 1PART 1萬億秒查萬億秒查應用場景用戶根據需求自定義查詢條件,想查什么就查什么!萬億秒查適用場景:
2、網絡綜合搜索綜合查詢云搜索快速檢索等數據規模超大、響應速度極快的查詢場景1000臺機器還是100臺機器?512G內存還是128G內存?2T*12的SSD還是2T*12的SATA?大文本,圖片,附件,視頻怎么存?萬億數據怎么存?萬億秒查技術挑戰面臨挑戰萬億秒查常規每天百億數據,總量萬億。需滿足上百個維度想查什么就查什么,結果秒級響應。1:按列簇混合使用不同磁盤。2:按列簇設置不同存儲生命周期。3:按列簇設置不同的索引格式:行存、列存、混合存儲、聯合索引。4:大文本,附件,圖片,視頻單獨存儲。列簇存儲(原生lucene不支持列簇)想怎么存就怎么存!存儲根據場景分類萬億秒查-數據管理列簇存儲示意圖列
3、簇存儲示意圖數數據據列列一一數數據據列列二二數數據據列列三三數數據據列列四四數數據據列列五五數數據據列列六六列簇一列簇一列簇二列簇二數數據據列列一一數數據據列列四四數數據據列列六六數數據據列列二二數數據據列列三三數據只存儲數據只存儲在在SAS上上數據存儲在數據存儲在SSD與與SAS上上數數據據列列五五萬億秒查-數據存儲SSD固態硬盤-機械硬盤冷熱數據分離索引存SSD,數據存SATAPART 2PART 2多列聯合索引多列聯合索引場景應用類類型型3000條家尋親人2300300感恩尋人尋找老賴400關系3000條父母9001600子女朋友500性別5000條男1800女1200姓名500條姓王1
4、8090姓張姓李230多列聯合索引場景應用多列聯合索引技術挑戰只能對單列建立倒排索引,采用docvalues進行統計分析。多列統計多列統計 數據散落在磁盤的不同位置,隨機IO太多,硬盤負載太高。每條數據都要進行一次計算,暴力計算CPU與IO消耗很高。數據導出需要瞬間導出百萬條。面臨挑戰1:每列之間采用列存儲。2:預先干預數據的排序分布讓列存儲的壓縮更有效。3:依據查詢構造順序讀取。4:多個列之間有層次關系。5:結合分塊存儲。多列統計想統計什么就統計什么!千億數據即席多維統計多列聯合索引lucene改造02PART 3PART 3地理位置檢索地理位置檢索應用場景區域查車/軌跡匹配-同行同住,同飛
5、地理位置檢索技術挑戰原生lucene地理位置檢索與軌跡匹配慢,性能差地理位置檢索采用docvalues的二次驗證面臨挑戰黃色部分需要剪切驗證 大幅度的減少隨機讀取的次數,降低磁盤負載。通過地理位置臨近數據臨近存儲的方式構造硬盤上的連續讀取,因常規磁盤的連續讀取的性能會遠遠高于隨機讀寫的性能,從而大幅度的提升查詢響應的速度。改造優勢地理位置檢索lucene改造03隨機讀變順序讀1:我們拋棄docvalues方式的二次驗證與剪切。2:我們按照地理位置臨近數據臨近存儲的方式存儲數據,在此基礎上進行二次驗證PART 4PART 4HDFSHDFS上的索引HDFSHDFS上的索引技術挑戰 磁盤寫入不均衡
6、,有的機器很滿,有的機器很空。本地硬盤無快照功能,誤刪數據無法恢復。數據遷移,擴容麻煩 個別磁盤變慢,所有查詢都卡在該盤的IO上。硬盤均衡硬盤難以均衡、不支持數據快照、數據遷移難度大數據存本地磁盤面臨挑戰HDFSHDFS上的索引lucene改造04磁盤容錯與慢讀識別Hdfs:具有容錯能力,如果某些磁盤突然壞掉,或者速度變慢,能夠自動發現,并自動切換到速度較快的副本上繼續讀取IO管控通過對IO與查詢Session的關聯,實現IO管控,判斷某個查詢的IO消耗,以及執行時間,在IO層可以隨時中斷,從而實現查詢任務的取消,任務超時自動取消等功能數據快照支持快照功能,1P數據2秒鐘創建快照,誤操作弄丟數
7、據可找回快速分裂統一的命名空間,專利技術,1P數據,10秒內分裂完畢自動均衡,擴容自動遷移數據自動均衡,自動balance,統一的命名空間,1P數據,10秒內分裂完畢PART 5PART 5系統穩定性過載保護技術挑戰整個系統查崩sql寫錯面臨挑戰錯 誤 s q l 對手機號進行1*的檢索。對有數據傾斜的列,進行多表關聯。limit 10000000000 partition by 一個不均衡的列過載保護lucene改造051.過載過載控制控制對查詢資源進行限制,如果超過設定的資源,則主動停止該SQL的運行。1.1解決的主要問題解決的主要問題 倒排表掃描長度限制。shuffle 達到過載保護的閾
8、值,則中斷此SQL,保證系統服務正常。單次查詢文件讀寫量的過載控制。SQL任務執行時間的控制-超時則kill.系統穩定性技術挑戰頻繁OOM,掉片,爆內存,IO與CPU負載高僅幾億數據場景面臨挑戰系統穩定性lucene改造05PART 6PART 6索引的分分合合一種基于一種基于lucene的大索引快速分裂的大索引快速分裂大索引分裂lucene改造06想怎么分裂就怎么分裂!1秒內reindex,索引快速分裂!大索引實時導入性能lucene改造06PART PART 7 7其他SNGram切詞算法簡介SNGram全稱Skip Ngram,是對Ngram算法的改進。用以解決Ngram算法膨脹率太高的
9、問題?;舅枷霝樵~本身也可以分為詞和詞的索引。先進行粗粒度級別的切詞,如每隔8個字切一個詞。將粗粒度的詞,排重后進一步得出細粒度的詞,針對細粒度的詞創建索引。無詞庫切詞lucene改造07想怎么切詞就怎么切詞!解決膨脹率問題!切的粒度很細,詞比較多,但不保存doclist、偏移、位置信息。內容文字2詞的索引詞的索引詞的本身詞的本身切的粒度比較粗,詞比較少,保存doclist、偏移、位置信息?;趌ucene之上的spark01技術架構實現產品項目應用-探索性分析www.lucene.xin稽查布控監控報警用戶畫像統計分析同行同住同飛時空軌跡匹配碰撞全文全庫綜合檢索即席與探索性分析 自主核心技術模塊主從集群過載保護集成SparkHDFS 索引列簇技術多列索引異構存儲核心技術支撐著萬億規模數據視頻存儲實時導入公安行業軍隊領域交管安防汽車行業 垂直行業運用 產品應用“聯系我們