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使用不当容易内存泄露,而且性能太差。用于分词的相关对象是共用的,减少反复的创建对象和 释放对象