shard简介
Elasticsearch 中的数据会整理为索引。每个索引又由一个或多个分片组成。每个分片都是一个 Lucene 索引实例,您可以将其视作一个独立的搜索引擎,它能够对 Elasticsearch 集群中的数据子集进行索引并处理相关查询。
分片是 Elasticsearch 在集群内分发数据的单位。Elasticsearch 在对数据进行再平衡(例如发生故障后)时移动分片的速度取决于分片的大小和数量,以及网络和磁盘性能。
刷新
数据写到分片上周,会定期写到磁盘上不可更新的lucene段中,这个时候数据遍可以查询了,这个就是刷新。
合并
随着段数越来越多,这些段会定期合并为更大的段。这一过程称为合并。由于所有段都是不可更改的,这意味着在索引期间所用磁盘空间通常会上下浮动,这是因为只有合并后的新段创建完毕之后,它们所替换的那些段才能删掉。合并是一项极其耗费资源的任务,尤其耗费磁盘 I/O。
index可能带来的问题
对于每个 Elasticsearch 索引,mapping映射和状态的相关信息都存储在集群状态中。这些信息存储在内存中,以便快速访问。因此,如果集群中的索引和分片数量过多,这会导致集群状态过大,如果mapping映射较大的话,尤为如此。这会导致更新变慢,因为所有更新都需要通过单线程完成,从而在将变更分发到整个集群之前确保一致性。
解决
- 对于数据量小的数据,可以使用一个固定名字或者按照月/年存储数据到index,有助于减少存储在集群中的索引和分片数量。
- 相似数据结构的数据都存储到一个index中,有助于减少存储在集群中的索引和分片数量。
shard可能带来的问题
- 一个shard底层为一个lucene索引,会消耗一定文件句柄,内存,cpu等。例如堆内存会存储分片级别以及段级别信息的数据结构,因为只有这样才能确定数据在磁盘上的存储位置。这些数据结构的大小并不固定,不同用例之间会有很大的差别。
- 每个search请求都需要命中inde

本文详细介绍了Elasticsearch中的分片概念及其重要性,包括刷新和合并过程。讨论了过多或过小分片可能带来的问题,如集群状态过大、资源竞争和查询效率下降,并提供了相应的优化策略,如合理设定分片大小、控制索引数量和使用shrink index API。建议每个分片大小保持在20GB至40GB之间,同时注意节点内存与分片数量的平衡。
最低0.47元/天 解锁文章
6786

被折叠的 条评论
为什么被折叠?



