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和堆大小,它会改进吗?还有其他任何设置/调整吗?
目前,我处于开发阶段,因此我可以切换到其他数据存储系统,这可以满足我在快速阅读,编写和分析数据的要求。这些想法也受到欢迎。