MongoDB Atlas插入许多文件非常慢

时间:2019-01-24 04:18:15

标签: c# mongodb mongodb-atlas

我正在测试MongoDB地图集,并与我的代码在本地网络上的Docker中运行的方式进行比较。

这是我的docker插入时间的日志;

Called Add for INInvoiceData
Adding 511 for INInvoiceData
Added
Time elapsed: 00:00:02
Finished add/update for INInvoiceData
Called Add for OEOrderData
Adding 427 for OEOrderData
Added
Time elapsed: 00:00:01
Finished add/update for OEOrderData
Total Time elapsed: 00:01:12

这里使用的是付费2GB群集

Logged in
Called Add for INInvoiceData
Adding 511 for INInvoiceData
Added
Time elapsed: 00:00:59
Finished add/update for INInvoiceData
Called Add for OEOrderData
Adding 427 for OEOrderData
Added
Time elapsed: 00:00:48
Finished add/update for OEOrderData
Time elapsed: 00:03:00

我在新西兰,数据库在美国的俄勒冈州(AWS)。我正在使用InsertMany()添加大约500个文档。

每个文档平均约11kb,完成收集后仅5.9mb!我目前在连接上上传了500mb。

这是代码示例

    static void AddMongo(IMongoDatabase MongoDB, List<DocumentUpdate> documents, string objectName)
    {
        Console.WriteLine($"Called Add for {objectName}");
        var collection = MongoDB.GetCollection<BsonDocument>(objectName);
        // initialise write model to hold list of our upsert tasks
        List<BsonDocument> bsonList = new List<BsonDocument>();
        Console.WriteLine($"Adding {documents.Count} for {objectName}");

        // Create new stopwatch.
        Stopwatch stopwatch = new Stopwatch();

        // Begin timing.
        stopwatch.Start();

        // Loop docs and add our PK
        for (var i = 0; i < documents.Count; i++)
        {
            var bsonDoc = BsonDocument.Parse(documents[i].json);
            bsonDoc["_id"] = documents[i].keyValue;
            bsonList.Add(bsonDoc);
        };

        collection.InsertMany(bsonList);

        Console.WriteLine("Added");
        // Stop.
        stopwatch.Stop();

        // Write hours, minutes and seconds.
        Console.WriteLine("Time elapsed: {0:hh\\:mm\\:ss}", stopwatch.Elapsed);
    }

有什么想法吗?

编辑:

进行一些调整后,我可以通过在循环中插入一个来解决这个问题。但是,这并不理想。

    static void AddMongo(IMongoDatabase MongoDB, List<DocumentUpdate> documents, string objectName)
    {
        Console.WriteLine($"Called Add for {objectName}");
        var collection = MongoDB.GetCollection<BsonDocument>(objectName);
        // initialise write model to hold list of our upsert tasks
        List<BsonDocument> bsonList = new List<BsonDocument>();
        Console.WriteLine($"Adding {documents.Count} for {objectName}");

        // Create new stopwatch.
        Stopwatch stopwatch = new Stopwatch();

        // Begin timing.
        stopwatch.Start();

        // Loop docs and add our PK
        for (var i = 0; i < documents.Count; i++)
        {
            var bsonDoc = BsonDocument.Parse(documents[i].json);
            bsonDoc["_id"] = documents[i].keyValue;
            collection.InsertOneAsync(bsonDoc);
            //bsonList.Add(bsonDoc);
        };

        //collection.InsertMany(bsonList);

        Console.WriteLine("Added");
        // Stop.
        stopwatch.Stop();

        // Write hours, minutes and seconds.
        Console.WriteLine("Time elapsed: {0:hh\\:mm\\:ss}", stopwatch.Elapsed);
    }

0 个答案:

没有答案