2016-07-28 98 views
0

我正在从动态导出海量数据集到弹性搜索。 以下是步骤:弹性搜索批量上传随着时间的推移而减慢

  1. 从SQL获取数据(我正在使用实体框架)。我们将主要类型命名为联系人。
  2. 然后,我按定义的大小对数据进行分组并将其序列化。
  3. 根据ES Docs批量上传的格式数据
  4. 调用HttpPost并将数据发送到ES端点。

我正在做广泛的日志记录所需的时间和任何错误。

这一切工作,我的出口在一小时内出口数据。

也就是说,我观察到HttpPost的响应时间不断增加。我已经寻找任何我可以拥有的内存泄漏,或者我应该处理的任何内存泄漏。我想确保它不会在以后困扰我。

那么,响应时间增加的可能原因是什么? 我应该如何去调查这个问题?

回答

0

我使用ES 1.7和我使用类似的方案索引大约10万个文档。 根据我的经验,如果您将ES推入硬盘,它会减速并且有时会因OutOfMemory异常而失败。 我不知道它是否仍然是新版本的问题。

恕我直言,这是因为ES需要一些时间来处理大块 - 它接受数据,索引它,但之后它做了一些后台工作来优化索引。

为了解决这个问题,我尝试了一些参数:单个批量大小(N),索引块(S1)之间的睡眠时间以及几个(M)块(S2)之间更长的睡眠时间。 对于我的数据集和我的硬件,我以N = 5000,S1 = 1s,M = 10,S2 = 10s结束。 要选择安全值,我观察CPU,内存和I/O的使用情况。例如,长时间增加的I/O使用可能表明ES很快就会中断。

我确定它非常依赖于你所拥有的硬件,特别是给ES尽可能多的内存!

+0

这对我有用。我基本上找到了批量上传的最佳位置。 – Alok

相关问题