c#操作mongodb插入数据效率的示例分析

62次阅读
没有评论

共计 4108 个字符,预计需要花费 11 分钟才能阅读完成。

这篇文章主要介绍了 c# 操作 mongodb 插入数据效率的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

mongodb 的数据插入速度是其一个亮点,同样的 10000 条数据,插入的速度要比 Mysql 和 sqlserver 都要快,当然这也是要看使用者怎么个使用法,你代码如果 10000 次写入使用 10000 次连接,那也是比不过其他数据库使用事务一次性提交的速度的。

同样,mongo 也提供的一次性插入巨量数据的方法,因为 mongodb 没有事务这回事,所以在在 C# 驱动里,具体方法是 InsertManyAsync()一次性插入多个文档。与之对应的是 InsertOneAsync,这个是一次插入一个文档;

InsertManyAsync()这个方法带入的参数只要是实现了 IEnumerable 接口的类型就可以,所以可是 list , 这样的数据类型;

同样的 10000 次插入,两个方法时间差别很大。如图:

使用一次性插入多个文档方法,插入 10000 条耗时仅 1.3 秒,分成 10000 次插入,耗时 19.9 秒。区别大了个去。同样,前面我做过使用 mysql 插入 10000 条记录,要用 4 秒多,可见,这 mongodb 插入速度不是吹 的。

具体的代码如下,贴上:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MongoDB.Bson;
using MongoDB.Driver;
using System.Diagnostics;
namespace sqltomongo
 public class MongoHelp
 {
 private static IMongoClient client
 {
 get
 { if (null == _client)
 {
 _client = new MongoClient( mongodb://127.0.0.1:27017 
 }
 return _client;
 }
 }
 public static IMongoDatabase database
 {
 get {
 _database = client.GetDatabase( HotelPersonInfo 
 return _database;
 }
 set {
 _database = value;
 }
 }
 public static IMongoCollection BsonDocument  collection
 {
 get {
 return _collection;
 }
 set {
 _collection = value;
 }
 }
 protected static IMongoClient _client;
 protected static IMongoDatabase _database;
 protected static IMongoCollection BsonDocument  _collection;
 // 测试效率,两个方法用时比较
 public async static void TestMongo()
 {
 // 自定义的对象
 RoomInfo roomdata = new RoomInfo();
 List BsonDocument  docunemts = new List BsonDocument 
 collection = database.GetCollection BsonDocument ( HotelPersonInfo 
 Stopwatch sw = new Stopwatch();
 sw.Start();
 for (int i = 1; i   10000; i++)
 {
 //mongo 对用户自定义的对象扩展了 tobasonDocument 这个方法,可直接用
 var roomdatadocument = new BsonDocument(roomdata.ToBsonDocument());
 docunemts.Add(roomdatadocument);
 }
 // 一次 10000 条
 // 这方法   查看 api 手册,只要实现了 IEnumerable 借口的类型就都行
 await collection.InsertManyAsync(docunemts);
 sw.Stop();
 TimeSpan ts2 =sw.Elapsed;
 Console.WriteLine(total is   + ts2.TotalMilliseconds);
 /// 一次次插  10000 次
 Stopwatch sw2 = new Stopwatch();
 sw2.Start();
 for (int i = 1; i   10000; i++)
 { var roomdatadocument = new BsonDocument(roomdata.ToBsonDocument());
 await collection.InsertOneAsync(roomdatadocument);
 } 
 sw2.Stop();
 TimeSpan ts22 = sw2.Elapsed;
 Console.WriteLine(total is   + ts22.TotalMilliseconds);
 // await collection.InsertOneAsync(roomdatadocument);
 //collection = database.GetCollection BsonDocument ( HotelPersonInfo 
 // collection.InsertOneAsync(roomdatadocument);
 }
 }
}

里面使用了一个自定义的对象:

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MongoDB.Bson;
namespace sqltomongo
 public class RoomInfo 
 { public RoomInfo()
 {
 // id =  test  
 Name =  nafd  Moblie =  123456  EMail =  dd@qq.com  Tel =  010123  Fax =  0755-001 
 IdentityId =  616112323231  RegisterType =  tid  CardNo =  cardno  Sex =  男  Birthday =  1999 
 Address =  china beijing  ZipCode =  519000  RegisterDate =  2015-03-03 
 District2 =  District2 
 District3 =  District3 
 District4 =  District4 
 }
 // public string id { get; set; }
 ///  summary 
 ///  名字
 ///  /summary 
 public string Name { get; set; } 
 ///  summary 
 ///  手机号码
 ///  /summary 
 public string Moblie { get; set; }
 ///  summary 
 ///  邮箱
 ///  /summary 
 public string EMail {get;set;}
 ///  summary 
 ///  座机
 ///  /summary 
 public string Tel { get; set; }
 ///  summary 
 ///  传真
 ///  /summary 
 public string Fax { get; set; }
 ///  summary 
 ///  身份证
 ///  /summary 
 public string IdentityId { get; set; }
 ///  summary 
 ///  使用什么注册的
 /// ID -- 身份证  (只需要 id 身份证的信息) ///  /summary 
 public string RegisterType { get; set; }
 ///  summary 
 ///  会员卡号
 ///  /summary 
 public string CardNo { get; set; }
 ///  summary 
 ///  性别
 ///  /summary 
 public string Sex { get; set; }
 ///  summary 
 ///  生日
 ///  /summary 
 public string Birthday { get; set; }
 ///  summary 
 ///  地址
 ///  /summary 
 public string Address { get; set; }
 ///  summary 
 ///  邮编
 ///  /summary 
 public string ZipCode { get; set; }
 public string District2 { get; set; }
 public string District3 { get; set; }
 public string District4 { get; set; }
 ///  summary 
 ///  注册时间  
 ///  /summary 
 public string RegisterDate { get; set; }
 }
}

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“c# 操作 mongodb 插入数据效率的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计4108字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)