因为项目可能要上MongoDb,所以前几周对MongoDb作了一些了解,具体参照内容来自 于http://www.cnblogs.com/lipan/archive/2011/03/08/1966463.html的系列博客,至于安装服务则参照了其他博客,地址未搜藏。
作为存储数据的载体,其操作不外乎增删改查四项,所以我对其功能在做了简单的调试,至于并发之类的线程问题并未做具体工作。
在阅读了上面的博客之后,我首先做了一个类似SqlHelper的MongoDbHelper类(为了方便,并未做config配置,直接是默认路径):
public class MongoDbHelper { /// <summary> /// 获取Mongo实体 /// </summary> /// <param name="connStr">连接字符串</param> /// <returns>Mongo实体</returns> public static Mongo GetMongo(string connStr) { connStr = connStr == null ? "mongodb://localhost" : connStr; try { return new Mongo(connStr); } catch { return null; } } /// <summary> /// 获取数据库 /// </summary> /// <param name="mongo">Mongo实体</param> /// <param name="dbName">数据库名称</param> /// <returns>数据库</returns> public static IMongoDatabase GetMongoDb(Mongo mongo, string dbName) { dbName = dbName == null ? "defaultDatabase" : dbName; try { return mongo.GetDatabase(dbName); } catch { return null; } } /// <summary> /// 获取数据库集合 /// </summary> /// <param name="connStr">连接字符串</param> /// <param name="dbName">数据库名</param> /// <param name="collectionName">集合名</param> /// <returns>集合</returns> public static IMongoCollection<Document> GetMonogoCollection(IMongoDatabase mongoDb, string collectionName) { collectionName = collectionName == null ? "defaultCollection" : collectionName; try { return mongoDb.GetCollection<Document>(collectionName); } catch { return null; } } }
值得一提的是MongoDb的速度,一百万条数据总共花了100秒左右,平均每秒10000条。
随后就在main中就对mongoDb进行插入操作添加数据:
class Program { static void Main(string[] args) { Mongo mongo = MongoDbHelper.GetMongo(null); IMongoDatabase mongoDb = MongoDbHelper.GetMongoDb(mongo,null); IMongoCollection<Document> docCollection = MongoDbHelper.GetMonogoCollection(mongoDb,null); mongo.Connect(); Document doc; List<Document> docList = new List<Document>(); for (int i = 0; i < 1000000; i++) { doc = new Document(); doc["Id"] = i; doc["Name"] = "aaaaa" + i.ToString(); docList.Add(doc); } for (int i = 0; i < docList.Count; i++) { docCollection.Insert(docList[i]); } mongo.Dispose(); mongo.Disconnect(); Console.WriteLine("ok"); Console.ReadKey(); } }
完成之后,重新修改了main函数分别利用lambda语句对其进行了删、查、改的操作:
class Program { static void Main(string[] args) { Mongo mongo = MongoDbHelper.GetMongo(null); IMongoDatabase mongoDb = MongoDbHelper.GetMongoDb(mongo,null); IMongoCollection<Document> docCollection = MongoDbHelper.GetMonogoCollection(mongoDb,null); mongo.Connect(); //单条删除 docCollection.Remove(new Document("Id", 1)); //单条查找 Document doca = docCollection.FindOne(new Document { { "Id", 2 } }); //单条修改 docCollection.Update(new Document("Id", 1), new Document("Id", 10000)); //批量删除 docCollection.Remove(d => (int)d["Id"] > 900000); //批量查找 ICursor<Document> docss = docCollection.Find(d => (int)d["Id"] < 30); //批量修改 docCollection.UpdateAll(new Document { { "Names", "hahaha" } }, d => (int)d["Id"] < 5); mongo.Disconnect(); Console.WriteLine("ok"); Console.ReadKey(); } }
总体来说,mongoDb的操作与sqlserver的操作有很大相似度,只是有一点内容本人现在依旧不明,望大神解惑:
mongoDb的大小问题,在数据被remove之后mongoDb产生的文件不会减小,不知道会不会一直增大,直至超过2G,最终使程序崩溃(本人一直都是使用的x86系统)?