国产精品日日摸夜夜添夜夜添,国产精品天干天干在线观看,日日摸夜夜添夜夜添无码

南京錄信軟件技術有限公司

下載試用

新聞動態

News

QCon全球軟件開發者大會:基于Lucene實現萬億級多維檢索與實時分析

2021-06-10 329

5月29日,錄信數軟技術總監鄭其華在QCon全球軟件開發者大會分享了“基于Lucene實現萬億級多維檢索與實時分析”的主題演講,現場座無虛席,活動在濃烈的技術討論氛圍中圓滿結束。下面,我們將對本次活動進行一個回顧,并將附上演講部分內容。
01 活動回顧



1.webp.jpg


在活動開始后,鄭其華首先介紹了自己以往的任職經歷和項目經驗,隨后正式進入了主題分享。


本次的分享主要分為三個部分。第一部分鄭其華闡述了目前大數據行業存在的技術痛點和數據的價值,鄭其華以比特幣“挖礦”這一行為舉例,闡明了數據在當前時代的價值。同時也分析了當前大數據生態中產品繁多卻功能單一,接口不一且運維復雜等痛點。


2.webp.jpg


在第二部分的分享中,鄭其華著重介紹了錄信是如何基于Lucene實現萬億級多維檢索和實時分析的實踐,鄭其華從面向萬億數據的五大挑戰(萬億數據存儲、秒級查詢響應、多維統計、區域檢索、計算引擎)出發,深入剖析了針對這些問題所采取的技術手段和優化方案。


這一深入的技術實踐剖析吸引了許多同學的注意,由于現場座位有限,很多站累了的同學選擇席地而坐。


3.webp.jpg


4.webp.jpg

在第三部分的分享中,鄭其華主要介紹了錄信在公安軍隊、汽車行業的應用場景,尤其是在公安軍隊領域有200多個商業用例。


在活動的最后,許多現場同學就一些技術問題向鄭其華進行了提問,鄭其華也一一回應。在活動結束后,一些同學與鄭其華進行了溝通,就一些技術問題的實現細節進行了討論。本次分享圓滿落幕。


5.webp.jpg

02 內容分享




萬億數據的挑戰與實現




萬億挑戰之一:數據存儲


第一個關于數據存儲。平常我們保存數據很簡單,往硬盤里面寫就行了。海量數據就沒那么簡單,會面臨很多問題。比如成本問題。是使用SSD固態硬盤還是機械磁盤,是使用100塊大磁盤,還是使用1萬塊小磁盤,在成本上都會造成巨大的差異。


其次,數據的安全性也是一個問題。萬一磁盤損壞了,或者誤刪除了,數據就會丟失。數據遷移、擴容也會比較麻煩。另外,還有一個讀寫均衡的問題。數據寫入不均衡的話,可能就會導致有的磁盤特別忙,有的磁盤很空閑。或者,如果有個別磁盤出問題了,讀寫速度變慢了,就會導致所有的查詢都會卡在這個磁盤的IO上面,降低了整體性能。


針對存儲的這些問題,我們采用了基于HDFS的索引技術來解決。

6.png

采用HDFS可以解決哪些問題呢?對于讀寫不均衡的問題,HDFS是一個高度容錯的系統,如果有磁盤壞掉了,或者速度變慢了,會自動切換到速度較快的副本上進行讀取。并且,會對磁盤數據讀寫進行自動均衡,避免出現數據傾斜的問題。對于數據安全性的問題,HDFS有數據快照、冗余副本等功能,可以降低因磁盤損壞,或者誤刪除操作帶來的數據丟失問題。對于存儲成本問題,HDFS支持異構存儲,可以混合使用各種存儲介質,降低硬件成本。而且,HDFS可以支持大規模的集群,使用和管理成本都比較低。


除此之外,為了進一步降低存儲成本,我們研發了列簇的功能。原生Lucene是不支持列簇的,列簇的好處是什么呢?

7.png

我們可以將數據列,指定為不同的列簇,按列簇來混合使用不同磁盤,并且可以對不同列簇設置不同的生命周期。比如,一個文檔里面可能包含一些結構化的數據,像標題、作者、摘要等等,這些數據一般比較小,而且是經常要進行檢索的。那么我們就可以將這些數據列定義為一個列簇,放在SSD上。還有一些類似附件、圖片、視頻等非結構化的數據,這些數據比較大,而且一般不會進行查詢的,可以定義為另一個列簇,放在的SATA盤上面。從而降低了SSD固態硬盤的使用量。另外,列簇結合HDFS的異構策略,我們還可以實現冷熱數據的分離。比如,有的業務經常查詢最近1個月以內數據。那么,我們就可以將最近1個月保留在SSD上,1個月以后,將數據,移到SATA盤上,從而進一步降低SSD使用量。


8.png

接下來,再看另外一個問題。大數據有一個基本的應用,就是查詢檢索。比如這個頁面上顯示的一個“全文檢索”功能,是從海量數據里面查找包含用戶輸入關鍵字的數據。這樣的搜索功能很常見,也不難實現。難的地方在于性能。對于萬億規模的數據,是幾秒就響應了,還是幾個小時再響應呢? 


 

萬億挑戰之二,檢索性能


為了實現萬億秒查的性能。我們對Lucene的倒排表進行了優化。


在全文檢索領域里面,通常的做法,就是進行切詞,然后記錄這個關鍵詞在哪個文檔里面出現過。同時,也會保存其他一些相關的信息。比如,這個關鍵詞出現的頻率、在這個文檔出現的位置等等,大概有十幾個元素,這些元素就是保存在倒排表里面。Lucene對這些元素,采用的是行存儲。這就意味著,每次查詢都需要把所有的十幾個元素都讀取出來。而我們在檢索時,實際用到的可能只有其中的兩三個元素。使用行存的話,會造成很多不必要的IO。因此,我們在這里,將倒排表里面的元數據,改成了列存儲。


9.png

10.png

列存的好處是,查詢用到哪個元素,我只讀取這個元素的內容,其他的內容就可以直接跳過。這個改動看上去很小,但是在海量數據的場景,對性能的影響卻是極大的。比如,我們查詢的關鍵字,可能命中了幾億條數據。就需要讀取幾億個倒排表的元數據信息,如果使用行存,讀取的數據量就是幾億個元數據乘以十幾個元素。而列存儲的話,只需要讀取兩三個元素,磁盤IO上就差了好幾倍。所以,通過倒排表元數據的列存化,減少無效IO,這樣一個優化,帶來了好幾倍的性能提升。

 

然后,第二個優化的地方呢,我們將倒排表按時序進行了存儲。


因為我們在實際場景中發現,很多數據會有一個時序性的特點。也就是數據都是隨著時間推移而產生的。對這些數據查詢時,一般也會結合時間范圍進行。比如查詢最近一天或者最近幾小時的汽車尾氣排放量等等。而原生Lucene的索引數據在存放時,是雜亂無序的。同一天的數據,可能存在磁盤的不同位置。這樣在讀取的時候,就是一個隨機讀取。所以,我們在這里也做了一點改進。把數據按照入庫的順序進行存放。那么,我們在查詢某時間段的數據時,只需要將磁盤上這一整塊的數據讀取出來。我們知道機械硬磁盤的隨機讀取性能比連續讀取性能要差很多。而且,磁盤在讀取連續數據時還有預讀功能。同樣大小的數據量,連續讀取的性能可能會比隨機讀取的性能高一個數量級。


經過對索引的優化,基本上萬億數據的檢索性能可以做到秒級響應。



国产精品日日摸夜夜添夜夜添,国产精品天干天干在线观看,日日摸夜夜添夜夜添无码