不要使用默认的动态字符串映射
默认的动态字符串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)。在这些情况下,我们认为集群分片过多了。