搜索引擎:HERMES
Hermes 的出現,并不是為了替代 Solr、ES 的,就像 ES 的出現并不是為了干掉 Oracle 和 MySQL 一樣,而是為了滿足不同層面的需求。
Hermes 使用特點:
1. 一個基于大索引技術的海量數據實時檢索分析平臺。側重數據分析。
2. 數據規模從幾億到萬億不等。最小的表也是千萬級別。
Hermes在索引上的改進:
1.索引按需加載
大 部分的索引處于關閉狀態,只有真正用到索引才會去打開;一級跳躍表采用按需Load,并不會Load整個跳躍表,用來節省內存和提高打開索引的速度。 Hermes經常會根據業務的不同動態的打開不同的索引,關閉那些不經常使用的索引,這樣同樣一臺機器,可以被多種不同的業務所使用,機器利用率高。
2. 排序和統計按需加載
排序和統計并不會使用數據的真實值,而是通過標簽技術將大數據轉換成占用內存很小的數據標簽,占用內存是原先的幾十分之一。
另外不會將這個列的全部值都Load到內存里,而是用到哪些數據Load哪些數據,依然是按需Load。不用了的數據會從內存里移除。
3. 索引存儲在HDFS中
理論上只要HDFS有空間,就可以不斷的添加索引,索引規模不再嚴重受機器的物理內存和物理磁盤的限制,容災和數據遷移容易得多。
4. 采用Gaia進行進程管理(騰訊版的Yarn)
數據在HDFS中,集群規模和擴容都是一件很容易的事情,Gaia在騰訊集群規模已達萬臺)。
5. 采用多條件組合跳躍降低數據傾斜
如果某個詞語存在數據傾斜,則會與其他條件組合進行跳躍合并(參考Doclist的Skip List資料)。
6. 多級Merger與自定義分區
7. GC上進行了一些優化
自 己進行內存管理,關鍵地方的內存對象的創建和釋放Java內部自己控制,減少GC的壓力(類似Hbase的Block Buffer Cache)。 不使用WeakHashMap和全局鎖,WeakHashMap使用不當容易內存泄露,而且性能太差。用于分詞的相關對象是共用的,減少反復的創建對象和 釋放對象。