es2.0已经发布了,改进挺大的,对索引方面的优化的也挺多的。

持久化速率自动化
2.0之前es对于索引持久化到硬盘的速率默认是20mb一秒,这个值有时候会太小从而导致写入速度过慢从而影响索引速度。2.0对其进行了速率自动化的改进。当merge操作太慢时,会自动提高速率。当merge操作跟上来时再降低速率。这样会使突然间进行的大merge不至于占用整个节点的io从而影响到搜索和索引操作。

多数据文件目录支持
使用多个数据文件目录有两个好处,一是提高存储空间,二是提高io能力。
这个功能虽然之前的版本就有,但是原先的实现是基于lucene索引文件的,每次写索引文件时默认都放到空间更多的那个磁盘里,这样一个分片的数据可能分布在不同的磁盘里。这种方法的一个坏处就是当一个磁盘损坏时,在该磁盘有那怕一个索引文件的分片都会损坏。对于2.0来说,这个数据分布操作是以分片为单位的。也就是说当一个分片分配到这个节点时,节点会自动选择这个分片的索引文件分到那个磁盘目录,这样的话单个分片的索引文件只存在同一个磁盘,就算这个磁盘挂了也只是挂了该磁盘上的分片,其它磁盘的不受影响,并且多个磁盘也可以同时使用到。

默认使用doc_value属性
docvalue是lucene的新特性,它的作用是把字段的值存储在磁盘而不是在内存里,这样可以大大降低内存的使用减少gc的发生。对于2.0版,当一个字段设置为indexed并且为not analyzed时,es会自动帮它加上doc_value参数。

支持lucene5的BEST_COMPRESSION特性
BEST_COMPRESSION是lucene5的新索引压缩功能,默认lucene是使用LZ4压缩方式,使用BEST_COMPRESSION压缩的话压缩率更高,但在压缩时会损耗一些处理性能,也就是用处理能力换取存储空间。

对文档id的优化
在1.4.2版之前的es使用自动生成的id当出现网络问题时有可能出现重复的文档,现在进行了优化,每次都是update索引。并提高了通过id查询文档的性能。从1.4版本开始es默认生成的是Flake id而不是之前的uuid,主要是因为之前有人做过性能测试,Flake的文档查找性能比uuid的高一倍。

 

参考资料:https://www.elastic.co/blog/performance-indexing-2-0