雁过留声 发表于 2024-9-4 14:20:48

Elasticsearch合并

在Elasticsearch中,合并是一个重要的操作,它有助于提高索引的性能和效率。合并主要涉及将多个小段(segments)合并为更大的段,以减少查询延迟和提高存储效率。
在Elasticsearch中,数据首先被写入到内存中,随着写入操作,数据会被持续写入到称为“段”的数据结构中。每个段都是一个不可变的、索引的结构,段在创建后不会再修改。随着时间的推移,会产生多个小段,尤其是在数据频繁写入时。
合并的工作原理


[*] 小段的形成:当新数据被索引时,Elasticsearch会将其分割成多个小段。每个段都是一个独立的倒排索引,对于搜刮而言,每个段都是一个可检索的单元。
[*] 合并的触发:随着时间推移,Elasticsearch会在背景自动监测段的数量,并在系统空闲时触发合并操作。合并的过程是将若干个小段整合为更大的段,以低落段的数量。
[*] 合并的目的:

[*]减少段的数量:低落搜刮时必要检查的段的数量,从而减少执行查询时的开销。
[*]提升搜刮性能:通过减少磁盘I/O和提高文档存储的密度,合并可以提升搜刮性能。
[*]节省存储空间:合并不光提高了段的效率,还可以去除重复的信息,优化存储。

自动合并

Elasticsearch会自动控制段的合并举动。合并的执行通常在背景进行,依据阈值和JVM的负载动态调整。
参数设置:合并的相关设置参数可以在索引设置中指定。例如,您可以设置分片的最大段数:
PUT /my_index/_settings
{
    "index": {
      "merge": {
            "policy": {
                "max_num_segments": 1
            }
      }
    }
} 手动合并

利用 _forcemerge API,可以手动触发合并操作:
POST /my_index/_forcemerge?max_num_segments=1 合并战略

Elasticsearch的合并战略是如何选择必要合并的段。可以利用以下参数设置合并举动:


[*]index.merge.policy:用于控制合并的具体举动,如最大合并段数、最小段大小等。
PUT /my_index/_settings
{
    "index": {
      "merge": {
            "policy": {
                "max_merge_at_once": 10,          // 每次合并最大处理的段数
                "segments_per_tier": 10,          // 每个层级的段数
                "tiered": true                     // 启用分层合并
            }
      }
    }
} 留意事项



[*] 性能影响:合并操作会占用系统资源,尤其是在执行手动合并时,可能会影响集群的性能。因此,应该选择在系统负载较低的时间段进行合并。
[*] 实时搜刮:合并不会影响查询的实时性,Elasticsearch会继续处理搜刮请求。
[*] 索引战略:利用符合的索引战略,可以更有效地利用合并机制,如分期处理小批量数据,并在适当时机进行合并。
 
 
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Elasticsearch合并