问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Elasticsearch禁用`doc_values`真的能省空间吗?

创作时间:
作者:
@小白创作中心

Elasticsearch禁用`doc_values`真的能省空间吗?

引用
CSDN
11
来源
1.
https://m.blog.csdn.net/qq_45560975/article/details/144446108
2.
https://m.blog.csdn.net/w776341482/article/details/143140135
3.
https://www.elastic.co/guide/cn/elasticsearch/guide/2.x/_deep_dive_on_doc_values.html
4.
https://www.elastic.co/guide/en/elasticsearch/reference/current/logs-data-stream.html
5.
https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks-file-descriptor.html
6.
https://discuss.elastic.co/t/elasticsearch-dense-vector-is-taking-up-too-much-storage-space-help/366046
7.
https://opster.com/guides/elasticsearch/data-architecture/source-filtering-stored-fields-docvalue/
8.
https://discuss.elastic.co/t/improve-search-performance/359306
9.
https://www.cnblogs.com/bingmous/p/18164028
10.
https://www.elastic.co/guide/en/elasticsearch/reference/current/index-mapping-ignore-above.html
11.
https://www.bookstack.cn/read/opensearch-2.18-en/54ae287fc9c18caa.md?wd=provides

在Elasticsearch中,doc_values默认开启以支持聚合、排序等操作。然而,如果不需要这些功能,禁用doc_values可以显著减少磁盘空间占用并提高索引速度。本文将详细探讨禁用doc_values的实际效果,帮助你更好地进行性能优化。

01

Doc Values的工作原理

doc_values是一种列式存储结构,与倒排索引并行生成,主要用于优化字段数据的存储和检索。它通过将倒排索引转置为正排索引,实现更高效的查询性能。doc_values特别适合数值类型数据的高效压缩,能够显著减少磁盘空间占用。

doc_values的压缩机制主要针对数字类型数据。例如,对于一组数据 [100, 1000, 1500]doc_values会检测最大公约数并进行压缩,将其转换为 [1, 10, 15]。这种压缩方式不仅减少了存储空间,还提高了数据访问速度。

对于字符串类型数据,doc_values通过构建顺序表进行编码和压缩。字符串类型数据会去重后存放到顺序表中,通过分配一个ID,然后使用数字类型的ID构建doc_values。这种处理方式使得字符串类型数据也能达到与数值类型数据相似的压缩效果。

02

禁用Doc Values的效果

禁用doc_values可以显著降低磁盘使用量,并可能提升索引速度。但是,禁用后相关字段将无法用于排序、聚合或脚本操作。因此,在决定是否禁用doc_values时,需要根据具体需求进行权衡。

对于10GB的数据,具体能节省多少空间取决于数据结构和字段类型。如果大量字段无需排序或聚合功能,禁用doc_values可能会带来明显的空间优化。然而,由于缺乏具体的压缩比例信息,很难给出精确的节省数值。

03

最佳实践建议

  1. 评估需求:首先分析哪些字段不需要排序、聚合或脚本操作。对于这些字段,可以考虑禁用doc_values

  2. 合理配置:通过在字段映射中设置doc_values: false来禁用特定字段的doc_values。例如:

    PUT my_index
    {
      "mappings": {
        "my_type": {
          "properties": {
            "session_id": {
              "type": "string",
              "index": "not_analyzed",
              "doc_values": false
            }
          }
        }
      }
    }
    
  3. 监控性能:禁用doc_values后,需要持续监控集群性能和磁盘使用情况,确保优化效果符合预期。

  4. 分片优化:除了禁用doc_values,还可以通过合理设置分片大小来优化磁盘使用。建议每个分片的数据量保持在几GB到几十GB之间,避免分片过多导致堆空间压力增大。

  5. 堆空间配置:对于使用doc_values的场景,建议将JVM堆空间设置为服务器内存的4-16GB,而不是传统的50%。这样可以留出更多内存给操作系统缓存,进一步提升性能。

通过上述措施,可以有效地优化Elasticsearch的磁盘使用和性能表现。但是,需要注意的是,禁用doc_values是一个需要谨慎对待的决策,必须在存储优化和功能需求之间找到平衡点。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号