0

我是 Mongo 和 Elasticsearch 的新手,我遇到了问题。

我将 Mongo 的集合移动到 ES 索引。收集的文件有 3000 万份。最初,该脚本快速移动了 1500 万个文件,并且没有中断。1500万后,“500内部错误”出现的频率更高。在 PHP 脚本的帮助下,我能够移动 2800 万个文件,之后我得到“500 内部错误”。错误日志为空。PHP 的内存限制设置为 1.2 GB,我无法放大它。

出现错误的脚本片段如下所示:

$db->createCollection($collectionName);
$collection = new MongoCollection($db, $collectionName);
$cursor = $collection->find()->skip($nextPortion)->limit($pageing);
while ($value = $cursor->getNext())
{
        ...........
    make JSON
    ...........
}

脚本无法通过此行。在这一行中,我收到服务器错误:

while ($value = $cursor->getNext())

我在 ES 中使用批量 API 移动文件。

除了增加 PHP 的内存之外,还有什么方法可以完成文件的移动?

谢谢您的帮助。

4

1 回答 1

0

您可以分批而不是一次全部执行,无论多长时间都运行 cronjob evrery 5 分钟。这意味着您不太可能因网络和游标生命周期而遇到问题。

此外,在 2800 万条记录上使用 skip() 可能不是一个好主意,我不确定是什么$nextPortion,但与所有这些记录结合使用并不是一件好事。

于 2013-07-26T14:31:40.770 回答