2

tl;dr:目前,我使用 Elasticsearch 5.6 作为我的 go 应用程序的数据存储。我有一百万个文档分布在 12 个索引中。每个索引有 5 个分片和 2 个副本。首先,我从 Elasticsearch 加载这些文档,然后对其进行处理,然后以 10000 文档/批次的速率批量索引它们。我运行 3 个工作人员,每个工作人员一次有一个异步 goroutine。这些 goroutine 是每个索引的,因此它们会为每个索引发送批量索引请求。这意味着一个工作人员在一个 goroutine 中发送大约 100,000 个文档。文档分批发送,每个 goroutine 发送近 10 批。整个过程需要一分钟多的时间。大多数时间都花在批量索引上。

我当前的 Elasticsearch 使用 6GB RAM 和 3.5GB 堆大小运行。我尝试通过将索引缓冲区大小增加到 20% 来调整 Elasticsearch 以提高索引速度。700MB。我禁用了不需要索引的字段的索引。我优化了映射中的数字字段类型。我禁用了 _all 字段。我将索引编解码器(压缩方法)更改为 best_compression。做了这一切之后,并没有太大的改善。

因此,我想获得提高批量索引性能的想法,以便在一分钟内完成所有过程。如果我向 Elasticsearch 添加更多 RAM 和堆大小,它会得到改善吗?还有其他设置/调整吗?

目前,我处于开发阶段,因此我也可以切换到其他数据存储系统,以适应我快速读取、写入和分析数据的要求。这样的想法也受到欢迎。

4

0 回答 0