分析测试百科网

搜索

喜欢作者

微信支付微信支付
×

Elasticsearch性能优化指南(十三)

2020.9.28
头像

王辉

致力于为分析测试行业奉献终身

不要使用默认的动态字符串映射

默认的动态字符串mappings会将字符串字段索引为文本和关键字。如果您只需要其中之一,则很浪费。通常,id字段仅需要索引为 keyword,而body字段仅需要索引为 text 字段。

可以通过在字符串字段上配置显式映射或设置将字符串字段映射为text 或keyword的动态模板来禁用此功能。

观测分片大小

较大的分片将在存储数据方面更加有效。要增加分片的大小,可以通过创建具有较少主分片的索引,创建较少的索引(例如通过利用Rollover API)或使用Shrink API修改现有索引来减少索引中的主分片数量。

请记住,较大的分片大小会带来缺点,例如较长的完整恢复时间。

禁用_source

_source字段存储文档的原始JSON body 。如果您不需要访问它,可以将其禁用。但是,需要访问_source的API(例如 update 和 reindex )将无法使用。

使用best_compression

_source和storage字段很容易占用不可忽略的磁盘空间。通过使用best_compression编解码器,可以更大程度地压缩。

强制合并

Elasticsearch中的索引存储在一个或多个分片中。每个分片都是一个Lucene索引,由一个或多个 segment(磁盘上的实际文件)组成。较大的 segment更有效地存储数据。

_forcemerge API可用于减少每个分片的段数。在许多情况下,通过设置max_num_segments = 1,可以将每个分片的 segment数减少到一个。

收缩索引

使用Shrink API,您可以减少索引中的分片数量。与上面的Force Merge API一起使用,可以大大减少索引的分片和分段的数量。

使用足够的最小数字类型

您为数字数据选择的类型可能会对磁盘使用产生重大影响。特别是,整数应使用整数类型( byte, short, integer o或 long)存储,并且浮点数应在适当的情况下存储在scaled_float中,或存储在适合以下用例的最小类型中:相对于double优先使用float或相对于float优先使用half_float将有助于节省存储空间。

使用索引排序来定位相似的文档

当Elasticsearch存储_source时,它会一次压缩多个文档,以提高整体压缩率。例如,文档共享相同的字段名称是很常见的,而文档共享某些字段值是很常见的,尤其是在基数较低或zipfian分布的字段上。

默认情况下,文档按添加到索引的顺序压缩在一起。如果启用了索引排序,则它们将按排序顺序进行压缩。将具有相似结构,字段和值的文档分类在一起可以提高压缩率。

将字段按相同顺序放在文档中

由于多个文档被压缩成块,因此如果字段总是以相同的顺序出现,则更有可能在这些_source文档中找到更长的重复字符串。

避免分片过多

在某些情况下,减少集群中的分片数量,同时保持相同数量的数据,可以更有效地利用系统资源(CPU,RAM,IO)。在这些情况下,我们认为集群分片过多了。


互联网
文章推荐