淺析MongoDB及其C#驅動的操作步驟
1:簡單介紹
MongoDB是一款分布式文檔數據庫,支持類似關型數據庫的主從結構,文檔以二進制Json形式存儲,無鎖,無事務,有索引。
2:安裝步驟
第一步:下載程序集http://www.mongodb.org/downloads
第二部:解壓并抽取相關的bin目錄到C:\Mongo下(這個任意選擇) ,并在該目錄下建db文件夾。
第三部:打開CMD窗口,進入到C:\Mongo\bin目錄下,運行mongod.exe --dbpath="c:\Mongo\db"
第四步:再開CMD窗口(保持以前的窗口不關閉)運行mongo.exe。在這個窗口你可以執行簡單的命令,以下簡單列出幾個
- > j = { name : "mongo" };
- {"name" : "mongo"}
- > t = { x : 3 };
- { "x" : 3 }
- > db.things.save(j);
- > db.things.save(t);
- > db.things.find();
- { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
- { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
- >
- > for (var i = 1; i <= 20; i++) db.things.save({x : 4, j : i});
- > db.things.find();
- > var cursor = db.things.find();
- > while (cursor.hasNext()) printjson(cursor.next());
- > db.things.find().forEach(printjson);
- > var cursor = db.things.find();
- > printjson(cursor[4]);
- > var arr = db.things.find().toArray();
- > arr[5];
- > db.things.find({name:"mongo"}).forEach(printjson);
- > db.things.find({x:4}, {j:true}).forEach(printjson);
- > printjson(db.things.findOne({name:"mongo"}));
- > db.things.find().limit(3);
3:C#版的驅動
以下列出幾款C#版的驅動,并作簡單介紹。
第一款:mongodb-csharp 項目地址:http://github.com/samus/mongodb-csharp
簡單介紹:該驅動是比較全的驅動,更新隨度非常快,有人已經應用到項目中去,并且表現非常好。目前他們的團隊正在致力于連接管理這部分功能的擴展例如:自動重連,連接池等等。
第二款:mongodb-net 項目地址:http://code.google.com/p/mongodb-net/
簡單介紹:該開發還在進行中,有些功能還沒有實現
第三款:MongoDB.Emitter 項目地址:http://bitbucket.org/gwbasic/mongodb.emitter/
簡單介紹:提供了強類型支持
第四款:CSMongo 項目地址:http://somewebguy.wordpress.com/2010/02/21/building-a-mongo-driver-part-1/
簡單介紹:實現了部分功能,并且沒有可下載的代碼。但是你可以看他的博客以了解這種驅動的思想。
第五款:simple-mongodb 項目地址:http://code.google.com/p/simple-mongodb/
簡單介紹:沒有提供源代碼,以JSon為核心。
最后一個是對第一款某些地方的增強,地址http://deserialized.com/convert-csharp-classes-to-and-from-mongodb-documents-automatically-using-net-reflection
第六款:NoRM 項目地址:http://github.com/atheken/NoRM
介紹:增強了第一種,支持強類型。
延伸閱讀
MongoDB Logo
Mongo是一個高性能,開源,無模式的文檔型數據庫,它在許多場景下可用于替代傳統的關系型數據庫或鍵/值存儲方式。Mongo使用C++開發,提供了以下功能:
◆面向集合的存儲:適合存儲對象及JSON形式的數據。
◆動態查詢:Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
◆完整的索引支持:包括文檔內嵌對象及數組。Mongo的查詢優化器會分析查詢表達式,并生成一個高效的查詢計劃。
◆查詢監視:Mongo包含一個監視工具用于分析數據庫操作的性能。
◆復制及自動故障轉移:Mongo數據庫支持服務器之間的數據復制,支持主-從模式及服務器之間的相互復制。復制的主要目標是提供冗余及自動故障轉移。
◆高效的傳統存儲方式:支持二進制數據及大型對象(如照片或圖片)。
◆自動分片以支持云級別的伸縮性(處于早期alpha階段):自動分片功能支持水平的數據庫集群,可動態添加額外的機器。
MongoDB的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋梁,集兩者的優勢于一身。根據官方網站的描述,Mongo適合用于以下場景:
◆網站數據:Mongo非常適合實時的插入,更新與查詢,并具備網站實時數據存儲所需的復制及高度伸縮性。
◆緩存:由于性能很高,Mongo也適合作為信息基礎設施的緩存層。在系統重啟之后,由Mongo搭建的持久化緩存層可以避免下層的數據源過載。
◆大尺寸,低價值的數據:使用傳統的關系型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲。
◆高伸縮性的場景:Mongo非常適合由數十或數百臺服務器組成的數據庫。Mongo的路線圖中已經包含對MapReduce引擎的內置支持。
◆用于對象及JSON數據的存儲:Mongo的BSON數據格式非常適合文檔化格式的存儲及查詢。
自然,MongoDB的使用也會有一些限制,例如它不適合:
◆高度事務性的系統:例如銀行或會計系統。傳統的關系型數據庫目前還是更適用于需要大量原子性復雜事務的應用程序。
◆傳統的商業智能應用:針對特定問題的BI數據庫會對產生高度優化的查詢方式。對于此類應用,數據倉庫可能是更合適的選擇。
◆需要SQL的問題
MongoDB支持OS X、Linux及Windows等操作系統,并提供了Python,PHP,Ruby,Java及C++語言的驅動程序,社區中也提供了對Erlang及.NET等平臺的驅動程序。
【編輯推薦】