Mongodb從配置到應用

來源:互聯網
上載者:User
早就想寫一篇Mongodb的文章了,苦於木有時間呀,今天抽空將我所學習到的Mongodb知識整合一下,分享出來,部分Mongodb知識來源於網路.此處不給出連結,如果有侵犯,請及時聯絡我... 一,Mongodb簡介

Mongo(http://www.mongodb.org/)是一個高效能,開源(代震軍大牛正在研究Mongodb的源碼,大家可以去看看http://www.cnblogs.com/daizhj/),模式自由(schema-free)的文檔型資料庫,它在許多情境下可用於替代傳統的關係型資料庫或鍵/值(key-value)儲存方式。Mongo使用C++開發,

具有以下特性: 面向集合的儲存:適合儲存物件及JSON形式的資料。 動態查詢:Mongo支援豐富的查詢運算式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。 完整的索引支援:包括文檔內嵌對象及數組。Mongo的查詢最佳化工具會分析查詢運算式,並產生一個高效的查詢計劃。 查詢監視:Mongo包含一個監視工具用於分析資料庫操作的效能。 複製及自動容錯移轉:Mongo資料庫支援伺服器之間的資料複製,支援主-從模式及伺服器之間的相互複製。複製的主要目標是提供冗餘及自動容錯移轉。 高效的傳統儲存方式:支援位元據及大型物件(如照片或圖片)。 自動分區以支援雲層級的伸縮性(處於早期alpha階段):自動分區功能支援水平的資料庫叢集,可動態添加額外的機器。 模式自由(schema-free),意味著對於儲存在mongodb資料庫中的檔案,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的檔案儲存體在同一個資料庫裡。 支援Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++語言的驅動程式,社區中也提供了對Erlang及.NET等平台的驅動程式。

使用場合: 網站資料:Mongo非常適合即時的插入,更新與查詢,並具備網站即時資料儲存所需的複製及高度伸縮性。 緩衝:由於效能很高,Mongo也適合作為資訊基礎設施的緩衝層。在系統重啟之後,由Mongo搭建的持久化緩衝層可以避免下層的資料來源 過載。 大尺寸,低價值的資料:使用傳統的關係型資料庫儲存一些資料時可能會比較昂貴,在此之前,很多時候程式員往往會選擇傳統的檔案進行儲存。 高伸縮性的情境:Mongo非常適合由數十或數百台伺服器組成的資料庫。Mongo的路線圖中已經包含對MapReduce引擎的內建支援。 用於對象及JSON資料的儲存:Mongo的BSON資料格式非常適合文檔化格式的儲存及查詢。

所謂“面向集合”(Collenction-Orented),意思是資料被分組儲存在資料集中,被稱為一個集合(Collenction)。每個集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文檔。集合的概念類似關係型資料庫(RDBMS)裡的表(table),不同的是它不需要定義任何模式(schema)。 二,Ubuntu 下配置Mongodb

Ubuntu知識掃盲:

chown -R : 對目前目錄下的所有檔案與子目錄進行相同的許可權變更(即以遞迴的方式逐個變更)

nohup命令:如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。nohup就是不掛起的意思( n ohang up)。

Mongodb目前最新版本是1.8.1
首先啟動終端 :
輸入 wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.1.tgz
下載mongodb-linux-i686-1.8.1.tgz安裝包
解壓 tar -zxvf mongodb-linux-i686-1.8.1.tgz

預設情況下Mongodb會在/data/db/ 這個檔案夾存放資料

在目前的目錄下輸入如下命令,建立使用者 :
//添加一個mongodb使用者
adduser mongodbxiao
//設定密碼
passwd mongodb 

繼續輸入

sudo mkdir -p /data/db/
//把"/data/db/”的屬主改成mongodb使用者 
$ sudo chown mongodbxiao /data/db/
$ chown -R mongodb:mongodbxiao /data 
當然 可以 通過--dbpath 命令 指定MongoDB將資料存放區到另外的目錄中去。

在運行下面的語句之前需要安裝一下mongo shell 否則會收到提示:程式“mongo”尚未安裝。
apt-get install mongodb-clients

運行資料庫
$  ./mongodb-linux-i686-1.8.1/bin/mongod
$ ./mongodb-linux-i686-1.8.1/bin/mongo 
> db.test.save({123123:'哈哈哈'})
> db.test.find(); 

建立資料庫並添加一條記錄,最後查詢結果:

到此證明我們在Ubuntu下配置Mongodb成功..

ps:使用Ubuntu過程中經常會遇到這個錯誤:

只需要輸入強制解鎖,命令即可解決。

sudo rm /var/cache/apt/archives/lock

sudo rm /var/lib/dpkg/lock 三,Mongodb用戶端管理工具

Try MongoDB

不用安裝就可以試用MongoDB,和tryredis一樣,是一個基於web的shell類比工具,可以讓你在不用安裝MongoDB的情況下試用MongoDB的各種功能.

Mongo3 – MongoDB 叢集管理工具

MongoVUE

一個windows下的用戶端管理工具,我推薦這個,非常不錯.有點類似於mysql管理工具..

四,Mongodb 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 與sql 語句對照

此處用mysql中的sql語句做例子,C# 驅動用的是samus,也就是上文中介紹的第一種.

引入項目MongoDB.dll

//建立Mongo串連
  var mongo = new Mongo("mongodb://localhost");
  mongo.Connect();
  //擷取一個資料庫,如果沒有會自動建立一個
  var db = mongo.GetDatabase("movieReviews");
  //建立一個列表,並為這個列表建立文檔
  var movies = db.GetCollection("movies");

串連沒問題之後,現在讓我們用mysql 與mongodb的一些語句做下對比:

  MongoDB Mysql
查詢全部 movies.find(new Document()) SELECT * FROM movies
條件查詢 movies.Find(new Document { { "title", "Hello Esr" } }); SELECT * FROM movies WHERE title= 'foobar'
查詢數量 movies.Find(new Document { { "title", "測試2" } }).Documents.Count(); SELECT COUNT(*) FROM movies WHERE `title` = 'foobar'
數量範圍查詢 1, movies.Find(new Document().Add("$where", new Code("this.num > 50")));

2, movies.Find(new Document().Add("num",  new Document().Add("$gt",50)));
($gt : > ; $gte : >= ; $lt : < ; $lte : <= ; $ne : !=)

3,movies.Find("this.num > 50");

4,movies.Find(new Document().Add("$where",new Code("function(x){ return this.num > 50};")));
select * from movies where num > 50
分頁查詢 movies.Find(new Document()).Skip(10).Limit(20); SELECT * FROM movies  limit 10,20
查詢排序語句 movies.Find(new Document()).Sort(new Document() { { "num", -1 } }); SELECT * FROM movies ORDER BY num DESC
查詢指定欄位 movies.Find(new Document().Add("num", new Document().Add("$gt", 50)), 10, 0, new Document() { { "title", 1 } }); select title from movies where num > 50
插入語句 movies.Insert(new Document() { { "title", "測試" }, { "resuleData", DateTime.Now } }); INSERT INOT movies (`title`, `reauleDate`) values ('foobar',25)
刪除語句 movies.Remove(new Document() { { "title", "Hello Esr" } }); DELETE * FROM movies
更新語句

movies.Update(new Document() { { "title", "測試2" } }
             , new Document() { { "title", "測試11111" } });

UPDATE movies SET `title` = ‘測試1111’ WHERE `title` = '測試1111'
Linq查詢

(from item in db.GetCollection("movies").Linq()
                       where ((string)item["title"]).StartsWith("Esr")
                       select item);

select * from movies where title like ‘%Esr’

轉:http://www.cnblogs.com/xiaogangqq123/archive/2011/04/26/2029426.html
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.