将~3gb 的数据库索引到 elasticsearch 中:如何做?

将~3gb 的数据库索引到 elasticsearch 中:如何做?

我每隔几天就会生成一个包含 200 万条记录的新数据库(转储为 json 时大约 3gb)。我想快速将其放入 ElasticSearch 中。

这就是我现在所做的:

  1. 创建一个新的索引并设置我想要的几个映射
  2. 设置。refresh_interval-1
  3. 将所有文档拆分成批次,每批次 300-500 个文档
  4. 将它们一批一批地发送到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

当时服务器上没有发生其他事情。

那么,我可能做错了什么?我试图寻找索引大量文档的唯一正确方法,但找不到。

相关内容