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