mongoimport在导入JSON文件时卡在同一点

时间:2015-10-24 06:32:28

标签: mongodb mongoimport

$ mongoimport --db InfDB --collection SFTest --file InfMapRed.json

通过以下命令导入JSON文件(每行13GB,1个JSON文档):

    2015-10-24T06:11:41.799+0000    connected to: localhost
    2015-10-24T06:11:44.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:11:47.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:11:50.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:11:53.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:11:56.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:11:59.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:12:02.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:12:05.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:12:08.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:12:11.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:12:14.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:12:17.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:12:20.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
    2015-10-24T06:12:23.788+0000    [........................] InfDB.SFTest       20.5 MB/13.0 GB (0.2%)
....

此命令用于在2.6中使用先前的存储引擎正常工作,但现在不会超过0.2%。该程序不断反复打印下面的行。该集合通过.count()显示1000条记录。

<form method="post" enctype="multipart/form-data">

<?php
    if(isset($_FILES['stud_photo']))
        {
          if(empty($_FILES['stud_photo']['type'][0]))
          {
            //your code here for file not found
          }
          else
          {
            //your code here for file found
          }
}
?>

写了一个简单的python脚本来读取文件并顺利插入文档,并且工作正常。

3 个答案:

答案 0 :(得分:3)

我遇到了大型json文件的问题, batchSize没有解决问题, 但是numInsertionWorkers确实

这仅适用于mongo 3:

在您的情况下,有1名工人,您可以插入0.2%的数据, 所以0.2 / 100 = 500,你需要500名工人一次获取数据

mongoimport --db InfDB --collection SFTest --file InfMapRed.json --numInsertionWorkers 500       

参考:https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption--numInsertionWorkers

答案 1 :(得分:2)

使用较小的批量大小解决了这个问题。

  

mongoimport --db InfDB --collection SFTest --file InfMapRed.json   --batchSize 100

这在导入大型文档时非常有用,默认批量大小为10000。

答案 2 :(得分:1)

检查辅助人员。当我在v3.0.8中遇到这个问题时,辅助设备被卡在RECOVERING状态,并且日志显示了原因:

2015-11-19T00:35:01.271+0000 I REPL     [rsBackgroundSync] replSet error RS102 too stale to catch up
2015-11-19T00:42:16.360+0000 I REPL     [rsBackgroundSync] replSet error RS102 too stale to catch up
2015-11-19T00:45:01.410+0000 I REPL     [rsBackgroundSync] replSet error RS102 too stale to catch up
2015-11-19T00:52:16.496+0000 I REPL     [rsBackgroundSync] replSet error RS102 too stale to catch up
2015-11-19T00:55:01.551+0000 I REPL     [rsBackgroundSync] replSet error RS102 too stale to catch up

默认情况下,mongoimport以“多数”写入操作运行。由于我的副手是陈旧的,他们无法复制导入操作,主要人员正在等待永远不会发生的复制。

在辅助节目上执行manual resync后,我再次尝试mongoimport成功。或者,如果只有一个辅助节点是RECOVERING,则可以使用--writeConcern选项将写入关注点设置为较低的数字。