调整磁盘使用量
编辑调整磁盘使用量编辑
禁用不需要的功能编辑
默认情况下,Elasticsearch 会对大多数字段进行索引并添加文档值,以便可以直接搜索和聚合它们。例如,如果您有一个名为 foo
的数字字段,您需要对其运行直方图但从不需要对其进行过滤,则可以在 映射 中安全地禁用对此字段的索引
response = client.indices.create( index: 'index', body: { mappings: { properties: { foo: { type: 'integer', index: false } } } } ) puts response
PUT index { "mappings": { "properties": { "foo": { "type": "integer", "index": false } } } }
text
字段在索引中存储归一化因子以方便文档评分。如果您只需要 text
字段上的匹配功能,但并不关心生成的分数,则可以使用 match_only_text
类型。此字段类型通过删除评分和位置信息来节省大量空间。
不要使用默认的动态字符串映射编辑
默认的 动态字符串映射 会将字符串字段同时索引为 text
和 keyword
。如果您只需要其中之一,这将造成浪费。通常,id
字段只需要索引为 keyword
,而 body
字段只需要索引为 text
字段。
可以通过在字符串字段上配置显式映射或设置将字符串字段映射为 text
或 keyword
的动态模板来禁用此功能。
例如,以下模板可用于仅将字符串字段映射为 keyword
response = client.indices.create( index: 'index', body: { mappings: { dynamic_templates: [ { strings: { match_mapping_type: 'string', mapping: { type: 'keyword' } } } ] } } ) puts response
PUT index { "mappings": { "dynamic_templates": [ { "strings": { "match_mapping_type": "string", "mapping": { "type": "keyword" } } } ] } }
关注分片大小编辑
较大的分片在存储数据方面效率更高。要增加分片的大小,可以通过以下方式减少索引中的主分片数量:创建索引 时使用更少的主分片、创建更少的索引(例如,利用 滚动 API)或使用 收缩 API 修改现有索引。
请记住,较大的分片大小也有一些缺点,例如完全恢复时间较长。
禁用 _source
编辑
_source
字段存储文档的原始 JSON 正文。如果您不需要访问它,则可以禁用它。但是,需要访问 _source
的 API(例如更新、突出显示和重新索引)将无法工作。
使用 best_compression
编辑
_source
和存储字段很容易占用大量的磁盘空间。可以使用 best_compression
编解码器 对其进行更积极的压缩。
强制合并编辑
Elasticsearch 中的索引存储在一个或多个分片中。每个分片都是一个 Lucene 索引,由一个或多个段组成,这些段是磁盘上的实际文件。较大的段存储数据效率更高。
强制合并 API 可用于减少每个分片的段数。在许多情况下,可以通过设置 max_num_segments=1
将每个分片的段数减少到一个。
我们建议仅对只读索引(即不再接收写入的索引)进行强制合并。 当文档被更新或删除时,旧版本不会立即被删除,而是被软删除并标记为“墓碑”。这些软删除的文档会在定期段合并期间自动清理。但是,强制合并可能会导致生成非常大(> 5GB)的段,这些段不符合定期合并的条件。因此,软删除的文档数量可能会迅速增长,导致磁盘使用量增加,搜索性能下降。如果您定期强制合并接收写入的索引,这也可能会使快照成本更高,因为新文档无法增量备份。
收缩索引编辑
收缩 API 允许您减少索引中的分片数量。结合上面的强制合并 API,这可以显著减少索引的分片和段的数量。
使用足够小的数字类型编辑
您为 数字数据 选择的类型会对磁盘使用量产生重大影响。特别是,整数应该使用整数类型(byte
、short
、integer
或 long
)存储,而浮点数应该存储在 scaled_float
中(如果适用),或者存储在适合用例的最小类型中:使用 float
而不是 double
,或者使用 half_float
而不是 float
将有助于节省存储空间。
使用索引排序将相似文档放在一起编辑
当 Elasticsearch 存储 _source
时,它会一次压缩多个文档,以提高整体压缩率。例如,文档共享相同的字段名是很常见的,而且它们共享某些字段值也很常见,尤其是在基数较低或 齐普夫定律 分布的字段上。
默认情况下,文档按添加到索引的顺序进行压缩。如果您启用了 索引排序,则它们将按排序顺序进行压缩。将结构、字段和值相似的文档排序在一起应该可以提高压缩率。
在文档中按相同顺序放置字段编辑
由于多个文档被压缩到块中,如果字段始终以相同的顺序出现,则更有可能在这些 _source
文档中找到更长的重复字符串。
汇总历史数据编辑
保留旧数据对于以后的分析很有用,但由于存储成本的原因,通常会避免这样做。您可以使用下采样来汇总和存储历史数据,其存储成本仅为原始数据的一小部分。请参阅 下采样时间序列数据流。