`

ElasticSearch索引优化

阅读更多

ES索引的过程到相对Lucene的索引过程多了分布式数据的扩展,而这ES主要是用tranlog进行各节点之间的数据平衡。所以从上我可以通过索引的settings进行第一优化:
“index.translog.flush_threshold_ops”: “100000″
“index.refresh_interval”: “-1″,
这两个参数第一是到tranlog数据达到多少条进行平衡,默认为5000,而这个过程相对而言是比较浪费时间和资源的。所以我们可以将这个值调大一些还是设为-1关闭,进而手动进行tranlog平衡。第二参数是刷新频率,默认为120s是指索引在生命周期内定时刷新,一但有数据进来能refresh像lucene里面commit,我们知道当数据addDoucment会,还不能检索到要commit之后才能行数据的检索所以可以将其关闭,在最初索引完后手动refresh一之,然后将索引setting里面的index.refresh_interval参数按需求进行修改,从而可以提高索引过程效率。
另外的知道ES索引过程中如果有副本存在,数据也会马上同步到副本中去。我个人建议在索引过程中将副本数设为0,待索引完成后将副本数按需量改回来,这样也可以提高索引效率。
“number_of_replicas”: 0
上面聊了一次索引过程的优化之后,我们再来聊一下检索速度比较慢的问题,其实检索速度快度与索引质量有很大的关系。而索引质量的好坏与很多因素有关。
一、分片数
分片数,与检索速度非常相关的的指标,如果分片数过少或过多都会导致检索比较慢。分片数过多会导致检索时打开比较多的文件别外也会导致多台服务器之间通讯。而分片数过少为导至单个分片索引过大,所以检索速度慢。
在确定分片数之前需要进行单服务单索引单分片的测试。比如我之前在IBM-3650的机器上,创建一个索引,该索引只有一个分片,分别在不同数据量的情况下进行检索速度测试。最后测出单个分片的内容为20G。
所以索引分片数=数据总量/单分片数
目前,我们数据量为4亿多条,索引大小为近1.5T左右。因为是文档数据所以单数据都中8K以前。现在检索速度保证在100ms 以下。特别情况在500ms以下,做200,400,800,1000,1000+用户长时间并发测试时最坏在750ms以下.
二、副本数
副本数与索引的稳定性有比较大的关系,怎么说,如果ES在非正常挂了,经常会导致分片丢失,为了保证这些数据的完整性,可以通过副本来解决这个问题。建议在建完索引后在执行Optimize后,马上将副本数调整过来。
大家经常有一个误去副本越多,检索越快,这是不对的,副本对于检索速度其它是减无增的我曾做过实现,随副本数的增加检索速度会有微量的下降,所以大家在设置副本数时,需要找一个平衡值。另外设置副本后,大家有可能会出现两次相同检索,出现出现不同值的情况,这里可能是由于tranlog没有平衡、或是分片路由的问题,可以通过?preference=_primary 让检索在主片分上进行。
三、分词
其实分词对于索引的影响可大可小,看自己把握。大家越许认为词库的越多,分词效果越好,索引质量越好,其实不然。分词有很多算法,大部分基于词表进行分词。也就是说词表的大小决定索引大小。所以分词与索引膨涨率有直接链接。词表不应很多,而对文档相关特征性较强的即可。比如论文的数据进行建索引,分词的词表与论文的特征越相似,词表数量越小,在保证查全查准的情况下,索引的大小可以减少很多。索引大小减少了,那么检索速度也就提高了。
四、索引段
索引段即lucene中的segments概念,我们知道ES索引过程中会refresh和tranlog也就是说我们在索引过程中segments number不至一个。而segments number与检索是有直接联系的,segments number越多检索越慢,而将segments numbers 有可能的情况下保证为1这将可以提到将近一半的检索速度。
$ curl -XPOST ‘http://localhost:9200/twitter/_optimize? max_num_segments =1′
五、删除文档
删除文档在Lucene中删除文档,数据不会马上进行硬盘上除去,而进在lucene索引中产生一个.del的文件,而在检索过程中这部分数据也会参与检索,lucene在检索过程会判断是否删除了,如果删除了在过滤掉。这样也会降低检索效率。所以可以执行清除删除文档。
$ curl -XPOST ‘http://localhost:9200/twitter/_optimize? only_expunge_deletes =true

 

 

 

$ curl -XPOST 'http://localhost:9200/twitter/_optimize'

 

管理索引优化

 optimize API允许通过API优化一个或多个索引。优化过程的操作基本上优化的索引搜索速度更快(和涉及到Lucene索引内保存每个碎片的段数)。优化操作允许减少的段数,把它们合并。

 

$ curl -XPOST 'http://localhost:9200/twitter/_optimize'

 

 

 

 

 

名称 描述
max_num_segments

段数优化。要全面优化索引,将其设置为1。默认设置只需检查是否需要执行一个合并,如果是这样,执行它

。【经过测试越小速度越快】

only_expunge_deletes 优化过程中应该只抹去段删除。在Lucene中,不会被删除的文件从段,只是标记为删除。分部在合并过程中,创建一个新的分部,没有那些删除。此标志只允许合并段删除。默认为false。【设置为true docs才会合并】
refresh 如果刷新后进行优化。默认为true
flush 如果冲洗后进行优化。默认为true
wait_for_merge 申请应等待合并结束。默认为true。注意,合并有可能是一个非常繁重的操作,所以它可能是有意义运行它设置为。【最好设置为false,默认true请求就会阻塞在那里,直到完成

优化API一个调用,可以应用到多个索引,或者所有索引

 

 

$ curl -XPOST 'http://localhost:9200/kimchy,elasticsearch/_optimize'

$ curl -XPOST 'http://localhost:9200/_optimize'

参数使用方法: http://localhost:9200/indexName/_optimize?only_expunge_deletes=true&wait_for_merge=false

 

 

 

1. 多线程程序插入,可以根据服务器情况开启多个线程index 
速度可以提高n倍, n>=2 

2. 如果有多台机器,可以以每台设置n个shards的方式,根据业务情况,可以考虑取消replias 
curl -XPUT 'http://10.1.*.*:9200/dw-search/' -d '{ 
    "settings" : { 
        "number_of_shards" : 20, 
        "number_of_replicas" : 0 
    } 
}' 
这里设置20个shards, 复制为0,如果需要replicas,可以完成index后再修改为replicas>=1 
原文:http://www.elasticsearch.org/guide/reference/api/admin-indices-create-index.html 

3. 提高ES占用内存 
内存适当调大,初始是256M, 最大1G, 
调大后,最小和最大一样,避免GC, 并根据机器情况,设置内存大小, 
$ bin/elasticsearch -f -Xmx4g -Xms4g -Des.index.storage.type=memory 
原文:http://www.elasticsearch.org/guide/reference/setup/installation.html 

4. 减少shard刷新间隔 
curl -XPUT 'http://10.1.*.*:9200/dw-search/_settings' -d '{ 
    "index" : { 
        "refresh_interval" : "-1" 
    } 
}' 

完成bulk插入后再修改为初始值 
curl -XPUT 'http://10.1.*.*:9200/dw-search/_settings' -d '{ 
    "index" : { 
        "refresh_interval" : "1s" 
    } 
}' 

5. 设置一个shard的段segment最大数 
可以减少段文件数,提高查询速度 
curl -XPOST 'http://10.1.*.*:9200/dw-search/_optimize?max_num_segments=5' 
注意:有时候可能需要多次执行 
原文:http://www.elasticsearch.org/guide/reference/api/admin-indices-update-settings.html 
原文:http://www.elasticsearch.org/guide/reference/index-modules/merge.html 

6. 去掉mapping中_all域 
Index中默认会有_all的域,这个会给查询带来方便,但是会增加索引时间和索引尺寸 
"_all" : {"enabled" : false} 
原文:http://www.elasticsearch.org/guide/reference/mapping/all-field.html 
curl -XPOST 'http://10.1.*.*:9200/dw-search/pt_normal/_mapping' --data-binary @pt_normal_properties.mapping 

7. 设置source为压缩模式或者disable 
compress=true这个能大大减少index的尺寸 
disable将直接没有_source域 

8. 增加merge.policy.merge_factor数 
设置merge.policy.merge_factor到30,初始是10 
增加这个数需要更多的内存,bulk index可以调大这个值. 
如果是即时索引,应该调小这个值 
原文:http://www.elasticsearch.org/guide/reference/index-modules/merge.html 

分享到:
评论

相关推荐

    02-Elasticsearch 索引优化-小红书刘显鹏 12.02 2023 Beijing

    Elasticsearch 索引优化

    elasticsearch索引介绍.pptx

    Elasticsearch(ES)是一种基于Lucene的分布式、RESTful搜索和分析引擎,广泛用于大数据的实时分析和检索。在本讲座中,我们将深入探讨Elasticsearch中的索引概念及其重要性。 首先,让我们理解一下ES中的“索引”...

    elasticsearch索引插件

    索引插件是Elasticsearch生态系统中的重要组成部分,它们扩展了Elasticsearch的功能,提供了更多管理和操作索引的便利性。"plugin-head"是其中一款知名的插件,主要用于提供一个直观的Web界面,帮助用户更轻松地管理...

    Nodejs实现自动清理elasticsearch过期索引(日志清理)

    在IT行业中,日志管理是系统维护和故障排查的关键环节,而Elasticsearch(简称ES)作为一款强大的全文搜索引擎,常被用来存储和分析大量日志数据。然而,随着日积月累,这些数据可能会变得非常庞大,如果不进行有效...

    Elasticsearch7.0备份索引脚本

    另一个文件`es配置修改.txt`可能是关于如何调整Elasticsearch配置以优化备份性能的指南。可能的修改包括: - **设置更大的堆内存**:备份大量数据时,可能需要增加Elasticsearch进程的堆内存限制。 - **调整线程池...

    Elasticsearch索引恢复

    2. 索引重新分配:当新增节点或调整副本数量时,Elasticsearch会自动进行索引的再分配,以优化数据分布。 3. 数据恢复:在执行了索引重建、快照恢复或通过其他方式恢复丢失的数据时,也需要进行索引恢复。 二、...

    Elasticsearch技术解析与实战_高清 带索引书签目录_朱林(著)

    Elasticsearch(简称ES)是一款基于Lucene的分布式、RESTful搜索和分析引擎,广泛应用于大数据处理、日志分析、实时搜索等领域。这本书针对不同层次的读者,提供了深入浅出的技术解析和实战指导。 **1. Elastic...

    ElasticSearch性能优化策略

    本文将详细介绍ElasticSearch性能优化的四个方面:服务器部署、服务器配置、索引设计以及其他优化措施。 #### 一、服务器部署 服务器部署是优化ElasticSearch性能的基础。合理的服务器部署能够充分利用硬件资源,...

    Elasticsearch优化及升级1

    为了确保其高效稳定运行,对Elasticsearch进行优化和升级是必不可少的。以下是一些关键的优化策略,主要关注内存管理、系统配置、索引设置以及网络配置。 1. 内存优化:Elasticsearch 建议使用系统内存的50%作为堆...

    Elasticsearch 存储方式和管理优化细节1

    总的来说,Elasticsearch的存储方式和管理优化涉及数据的实时性、持久化、索引结构优化、分片分配和冷热数据处理等多个方面。理解并合理调整这些设置,能有效提升Elasticsearch集群的性能和稳定性。

    Elasticsearch技术解析与实战+Elasticsearch权威指南

    在《Elasticsearch技术解析与实战》一书中,你将详细了解到如何安装配置Elasticsearch,设置集群,以及优化索引和查询性能。《Elasticsearch 权威指南(中文版)清晰PDF》则更深入地探讨了高级特性和最佳实践,包括...

    百度Elasticsearch实践及优化-高攀

    在本文中,我们将深入探讨百度在Elasticsearch实践与优化方面的经验分享,主要基于高攀的演讲内容。Elasticsearch是一种流行的开源全文搜索引擎,广泛应用于大数据分析和实时搜索。百度作为中国领先的互联网技术公司...

    ElasticSearch官方测试数据

    Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene库构建,被广泛用于大数据分析、日志聚合、实时搜索和索引等场景。官方提供的测试数据集是检验Elasticsearch功能、性能和稳定性的关键资源,可以帮助...

    Elasticsearch数据导出工具

    Elasticsearch数据导出工具是一种高效实用的解决方案,它允许用户方便地从Elasticsearch(ES)集群中抽取数据,并将其导出到不同的目标,如MySQL数据库或本地文件系统。这款工具尤其适用于需要进行数据迁移、备份或...

    从SQLServer收集事件并将其保存到Elasticsearch以便进行进一步分析

    创建一个脚本,定期连接到SQL Server,执行查询以获取事件,然后使用Elasticsearch客户端将数据索引到适当的索引中。 在Elasticsearch中,数据的结构化很重要。为了有效地分析SQL Server事件,我们需要设计合适的...

    Elasticsearch 在物流系统的应用

    Elasticsearch 的索引集群规模是指Elasticsearch 集群中索引的数量和大小。对于物流系统,索引集群规模需要根据運单数据的规模和搜索需求进行设计。一般来说,索引集群规模越大,搜索效率越高,但是存储成本也越高。...

    Elasticsearch-深入理解索引原理1

    在深入理解Elasticsearch(简称ES)的索引原理前,我们需要先明白基本概念。ES是一种分布式全文搜索引擎,它将数据存储在索引中,这些索引类似于关系型数据库中的数据库,但具备更高的可扩展性和实时性。索引可以...

    elasticsearch服务器安装包

    12. **性能优化**:Elasticsearch的性能受硬件、内存分配、索引设置等因素影响。优化包括调整heap大小、使用合适的数据类型、合理分配分片等。 13. **备份与恢复**:可以使用Elasticsearch的 `_snapshot` API进行...

    elasticsearch运维实践

    Elasticsearch是一个功能强大且灵活的搜索引擎,需要深入理解其架构、数据存储、读写流程、节点类型、索引管理、别名、快照、分词器和性能优化等方面的知识点,以便更好地使用和运维Elasticsearch。

    基于.netcore搜索封装ElasticSearch.zip

    在.NET Core中使用Elasticsearch,可以借助各种客户端库,实现与Elasticsearch服务器的交互,执行索引、查询、更新和删除等操作。 这个"TCT.Net.Base.ElasticSearch"库很可能是一个封装了Elasticsearch.NET和Nest的...

Global site tag (gtag.js) - Google Analytics