node.js在向mongodb插入许多记录时静默停止

时间:2012-12-26 16:52:48

标签: node.js mongodb

我有一个非常简单的mongodb数据库,有一个名为“test”的集合,我需要在集合中插入133.306条记录。这些记录存储在JSON文件中。该文件的大小为21Mb。一秒钟内成功插入50.000条记录。 70.000记录的插入会挂起脚本。

代码:

var path = require('path'),
    fs = require('fs'),
    mongodb = require('mongodb'),
    safe = { safe : true },
    rowset;

rowset = JSON.parse(fs.readFileSync(path.join(__dirname, 'test.js')));
console.log('Total records: ' + rowset.length);
rowset = rowset.slice(0, 50000); // OK
// rowset = rowset.slice(0, 70000); // FAIL
console.log('Inserting ' + rowset.length + ' records');

mongodb.MongoClient.connect('mongodb://127.0.0.1:27017/browser',
    function (err, client) {
        if (err) throw err;

        client.createCollection('test', safe, function (err, collection) {
            if (err) throw err;

            collection.insert(rowset, safe, function (err) {
                if (err) throw err;

                client.close(function (err) {
                    if (err) throw err;

                    console.log('done');
                });
            });
        });
    });

mongod输出中的最后几行:

Wed Dec 26 16:50:46 [initandlisten] connection accepted from 127.0.0.1:52003 #854 (4 connections now open)
Wed Dec 26 16:50:46 [initandlisten] connection accepted from 127.0.0.1:52004 #855 (5 connections now open)
Wed Dec 26 16:50:46 [initandlisten] connection accepted from 127.0.0.1:52005 #856 (6 connections now open)

这是行集中的典型记录:

{ _id: 133306,
  product: 23089,
  version: '1.0.0',
  update: null,
  edition: null,
  lang: null,
  entries: [ 54344, 54345 ] }

也许剧本达到某个阈值或限制?

1 个答案:

答案 0 :(得分:3)

我在计算机上测试了你的脚本,你说的类型有150000个条目,它就像一个魅力。对于20MB的json文件,该过程需要一个140MB的内存。

您可以使用此命令监视来自mongodb的已打开连接:

db.$cmd.sys.inprog.findOne( { $all : true } )

<强>更新

我试图插入600000个条目并将其挂起。你是对的。在这种情况下,您应该使用mongoimport。我生成了一个包含1 000 000个条目的文件,mongo import在不到一分钟的时间内插入了它们。 我照顾的一些问题:     导入文件应该像这样形成BSON(json的超集):

 {"product": 23089,"version": "1.0.0","update": null,"edition": null,"lang": null,"entries": [ 54344, 54345 ]}
 {"product": 23089,"version": "1.0.0","update": null,"edition": null,"lang": null,"entries": [ 54344, 54345 ]}
 {"product": 23089,"version": "1.0.0","update": null,"edition": null,"lang": null,"entries": [ 54344, 54345 ]}
  • 每行一个文档

  • 文档之间没有逗号分隔符

  • 您不应将它们包含在数组[]

以下是我用于导入的命令:

c:\mongodb\bin>
mongoimport --collection browser12 --file E:\Nodejs\StackOverflow.com\Mongodb\veryBigjson.json --dbpath C:\mongodb\data --port 27016 -d browser12 --ignoreBlanks