我每隔几天就会生成一个包含 200 万条记录的新数据库(转储为 json 时大约 3gb)。我想快速将其放入 ElasticSearch 中。
这就是我现在所做的:
- 创建一个新的索引并设置我想要的几个映射
- 设置。
refresh_interval
-1
- 将所有文档拆分成批次,每批次 300-500 个文档
- 将它们一批一批地发送到
bulk
索引 api(当然,要等待结果返回后再发送下一批)。我也尝试同时执行此操作,每次同时执行 3-5 个批次。
处理完约 10% 的文档后,ElasticSearch 批量 API 开始不时超时(请求超时为 30 秒)。我添加了重试,但接近 30-40% 时,一些批次开始连续失败 10 次。
我尝试操纵不同的数字。对于较小的批次,它太慢了。对于较大的批次/并发,它失败得更快。
请求是从 ElasticSearch 所在的同一台机器发送的。我有很多内存:
$ free -g
total used free shared buffers cached
Mem: 31 24 6 0 0 8
-/+ buffers/cache: 15 15
Swap: 15 6 9
当时服务器上没有发生其他事情。
那么,我可能做错了什么?我试图寻找索引大量文档的唯一正确方法,但找不到。