c#操作mongodb插入数据效率的示例分析
这篇文章主要介绍了c#操作mongodb插入数据效率的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
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插入速度不是吹 的。
具体的代码如下,贴上:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingMongoDB.Bson;usingMongoDB.Driver;usingSystem.Diagnostics;namespacesqltomongo{publicclassMongoHelp{privatestaticIMongoClientclient{get{if(null==_client){_client=newMongoClient("mongodb://127.0.0.1:27017");}return_client;}}publicstaticIMongoDatabasedatabase{get{_database=client.GetDatabase("HotelPersonInfo");return_database;}set{_database=value;}}publicstaticIMongoCollection<BsonDocument>collection{get{return_collection;}set{_collection=value;}}protectedstaticIMongoClient_client;protectedstaticIMongoDatabase_database;protectedstaticIMongoCollection<BsonDocument>_collection;//测试效率,两个方法用时比较publicasyncstaticvoidTestMongo(){//自定义的对象RoomInforoomdata=newRoomInfo();List<BsonDocument>docunemts=newList<BsonDocument>();collection=database.GetCollection<BsonDocument>("HotelPersonInfo");Stopwatchsw=newStopwatch();sw.Start();for(inti=1;i<10000;i++){//mongo对用户自定义的对象扩展了tobasonDocument这个方法,可直接用varroomdatadocument=newBsonDocument(roomdata.ToBsonDocument());docunemts.Add(roomdatadocument);}//一次10000条//这方法查看api手册,只要实现了IEnumerable借口的类型就都行awaitcollection.InsertManyAsync(docunemts);sw.Stop();TimeSpants2=sw.Elapsed;Console.WriteLine("totalis"+ts2.TotalMilliseconds);///一次次插10000次Stopwatchsw2=newStopwatch();sw2.Start();for(inti=1;i<10000;i++){varroomdatadocument=newBsonDocument(roomdata.ToBsonDocument());awaitcollection.InsertOneAsync(roomdatadocument);}sw2.Stop();TimeSpants22=sw2.Elapsed;Console.WriteLine("totalis"+ts22.TotalMilliseconds);//awaitcollection.InsertOneAsync(roomdatadocument);//collection=database.GetCollection<BsonDocument>("HotelPersonInfo");//collection.InsertOneAsync(roomdatadocument);}}}
里面使用了一个自定义的对象:
代码如下:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingMongoDB.Bson;namespacesqltomongo{publicclassRoomInfo{publicRoomInfo(){//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="chinabeijing";ZipCode="519000";RegisterDate="2015-03-03";District2="District2";District3="District3";District4="District4";}//publicstringid{get;set;}///<summary>///名字///</summary>publicstringName{get;set;}///<summary>///手机号码///</summary>publicstringMoblie{get;set;}///<summary>///邮箱///</summary>publicstringEMail{get;set;}///<summary>///座机///</summary>publicstringTel{get;set;}///<summary>///传真///</summary>publicstringFax{get;set;}///<summary>///身份证///</summary>publicstringIdentityId{get;set;}///<summary>///使用什么注册的///ID--身份证(只需要id身份证的信息)///</summary>publicstringRegisterType{get;set;}///<summary>///会员卡号///</summary>publicstringCardNo{get;set;}///<summary>///性别///</summary>publicstringSex{get;set;}///<summary>///生日///</summary>publicstringBirthday{get;set;}///<summary>///地址///</summary>publicstringAddress{get;set;}///<summary>///邮编///</summary>publicstringZipCode{get;set;}publicstringDistrict2{get;set;}publicstringDistrict3{get;set;}publicstringDistrict4{get;set;}///<summary>///注册时间///</summary>publicstringRegisterDate{get;set;}}}
感谢你能够认真阅读完这篇文章,希望小编分享的“c#操作mongodb插入数据效率的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。