C# C.将对象列表保存到Mongo的最快方法
我有几张物品清单C# C.将对象列表保存到Mongo的最快方法,c#,mongodb,C#,Mongodb,我有几张物品清单 List<ObjectClass1> ObjectList1; List<ObjectClass2> ObjectList2; 我希望在测试运行结束时将所有对象作为JSON写入Mongo。 最快的方法是什么? 我目前正在这样做: IMongoClient client = new MongoClient(); IMongoDatabase db = client.GetDatabase("MyDB"); db.CreateCollection("Obj
List<ObjectClass1> ObjectList1;
List<ObjectClass2> ObjectList2;
我希望在测试运行结束时将所有对象作为JSON写入Mongo。
最快的方法是什么?
我目前正在这样做:
IMongoClient client = new MongoClient();
IMongoDatabase db = client.GetDatabase("MyDB");
db.CreateCollection("ObjectList1");
var ObjectList1Collection = db.GetCollection<BsonDocument>("ObjectList1");
foreach(ObjectClass1 obj in ObjectList1)
{
var document = BsonSerializer.Deserialize<BsonDocument>(MyJSONSerializer.Serialize(obj));
ObjectList1Collection.InsertOneAsync(document);
}
db.CreateCollection("ObjectList2");
var ObjectList1Collection = db.GetCollection<BsonDocument>("ObjectList2");
foreach(ObjectClass2 obj in ObjectList2)
{
var document = BsonSerializer.Deserialize<BsonDocument>(MyJSONSerializer.Serialize(obj));
ObjectList2Collection.InsertOneAsync(document);
}
您不需要将其序列化为Json,只需调用:
ObjectList1Collection.InsertManyAsync(ObjectList1);
据我所知,这应该是最快的方式。您不需要将其序列化为Json,只需调用:
ObjectList1Collection.InsertManyAsync(ObjectList1);
据我所知,这应该是最快的方法。我建议您从以下代码开始:
IMongoClient client = new MongoClient();
IMongoDatabase db = client.GetDatabase("MyDB");
// create collection calls are not needed, MongoDB will do that for you
// db.CreateCollection("ObjectList1");
var objectList1Collection = db.GetCollection<ObjectClass1>("ObjectList1");
objectList1Collection.InsertMany(ObjectList1);
…对于第二个对象列表,大致相同。这将简单地以批量加载方式运行insert,即避免数千次调用MongoDB的开销,而是将对象列表分成包含1000个文档的包并发送给MongoDB
如果速度不够快,根据您的设置,可能会有各种各样的事情发生:
描述发生了什么事!只要你不知道瓶颈是什么,优化就没有什么意义。
实体到BsonDocuments的序列化过程转换在以下方面非常重要:
需要CPU功率,所以您可能希望使用多个CPU并行执行该位
线程-您可能需要一个具有大量内核的CPU。
然后您需要使用InsertMany的异步实现
方法,这样您的CPU可以在
发送一大块文档后等待网络/IO部件
去MongoDB。
如果您追求的是原始性能,那么您应该尽量使文档尽可能小-永远不要低估这方面的影响!
你可以投资更强大的硬件。这永远是一个选择。。。
您可以围绕MongoDB设置执行各种操作,包括分片,以便在I/O部分是罪魁祸首的情况下将负载分配到各个系统。
你可以和我一起玩
你可以摆弄一下桌子
…可能还有更危险的东西;
我建议您从以下代码开始:
IMongoClient client = new MongoClient();
IMongoDatabase db = client.GetDatabase("MyDB");
// create collection calls are not needed, MongoDB will do that for you
// db.CreateCollection("ObjectList1");
var objectList1Collection = db.GetCollection<ObjectClass1>("ObjectList1");
objectList1Collection.InsertMany(ObjectList1);
…对于第二个对象列表,大致相同。这将简单地以批量加载方式运行insert,即避免数千次调用MongoDB的开销,而是将对象列表分成包含1000个文档的包并发送给MongoDB
如果速度不够快,根据您的设置,可能会有各种各样的事情发生:
描述发生了什么事!只要你不知道瓶颈是什么,优化就没有什么意义。
实体到BsonDocuments的序列化过程转换在以下方面非常重要:
需要CPU功率,所以您可能希望使用多个CPU并行执行该位
线程-您可能需要一个具有大量内核的CPU。
然后您需要使用InsertMany的异步实现
方法,这样您的CPU可以在
发送一大块文档后等待网络/IO部件
去MongoDB。
如果您追求的是原始性能,那么您应该尽量使文档尽可能小-永远不要低估这方面的影响!
你可以投资更强大的硬件。这永远是一个选择。。。
您可以围绕MongoDB设置执行各种操作,包括分片,以便在I/O部分是罪魁祸首的情况下将负载分配到各个系统。
你可以和我一起玩
你可以摆弄一下桌子
…可能还有更危险的东西;