MongoDB 安裝配置

來源:互聯網
上載者:User

MongoDB 是一個高效能,開源,無模式的文檔型資料庫,採用C++開發,是當前NoSQL資料庫中比較熱門的一種,在許多情境下可用於替代傳統的關係型資料庫或鍵/值儲存方式

MongoDB使用BSON作為資料存放區和傳輸的格式,BSON是一種類似JSON的二進位序列化文檔,支援嵌套對象和數組。MongoDB很像MySQL,document對應MySQL的row,collection對應MySQL的table

MongoDB服務端可運行在Linux、Windows或OS X平台,支援32位和64位應用,預設連接埠為27017。推薦運行在64位平台,因為MongoDB在32位元模式運行時支援的最大檔案尺寸為2GB


1,特點和功能

1) 特點

  • 高效能、易部署、易使用,儲存資料非常方便。
  • 面向集合儲存,易儲存物件類型的資料,模式自由。
  • 支援動態查詢,支援完全索引,包含內部對象。
  • 支援複製和故障恢複。
  • 使用高效的位元據儲存,包括大型物件(如視頻等)。
  • 自動處理片段,以支援雲端運算層次的擴充性
  • 支援Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++語言的驅動程式,社區中也提供了對Erlang及.NET等平台的驅動程式。
  • 檔案儲存體格式為BSON(一種JSON的擴充),可通過網路訪問。

2) 功能

  • 面向集合的儲存:適合儲存物件及JSON形式的資料。
  • 動態查詢:Mongo支援豐富的查詢運算式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
  • 完整的索引支援:包括文檔內嵌對象及數組。Mongo的查詢最佳化工具會分析查詢運算式,並產生一個高效的查詢計劃。
  • 查詢監視:Mongo包含一個監視工具用於分析資料庫操作的效能。
  • 複製及自動容錯移轉:Mongo資料庫支援伺服器之間的資料複製,支援主-從模式及伺服器之間的相互複製。複製的主要目標是提供冗餘及自動容錯移轉。
  • 高效的傳統儲存方式:支援位元據及大型物件(如照片或圖片)
  • 自動分區以支援雲層級的伸縮性:自動分區功能支援水平的資料庫叢集,可動態添加額外的機器。

2,  適用場合

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

3, 下載安裝

mongoDB 下載, 最新版本 mongodb-linux-x86_64-2.2.3.tgz

mongoDB 安裝:

tar zxvf mongodb-linux-x86_64-2.2.3.tgz

cd mongodb-linux-x86_64-2.2.3

sudo mkdir /opt/mongodb-2.2.3

sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/

安裝完畢後,在瀏覽器URL欄輸入: http://localhost:27017/,出現下面內容則表示安裝成功!

4, 啟動關閉

1) 預設啟動

sudo ./bin/mongod    (預設儲存檔案目錄為/data/db/, 沒有則建立 sudo mkdir -p /data/db/, 預設連接埠為27017)

2)指定目錄啟動

sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/       (儲存檔案目錄為/opt/mongodb-2.2.3/ , 沒有則建立)

3) 指定連接埠啟動

sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/ -p 27000        (連接埠修改為指定27000),啟動輸出如下:

MongoDB starting : pid=4222 port=27000 dbpath=/opt/mongodb-2.2.3/ 32-bit host=ubuntu

4) 後台啟動命令

sudo ./bin/mongod -shardsvr -replSet shard1 -port=27017 -dbpath=/opt/mongodb-2.2.3/ -logpath=/opt/mongodb-2.2.3/log -logappend -rest -fork

5) 後台關閉命令

$ .bin/mongod                       // 登入用戶端> use admin                          // 切換到管理員> db.shutdownServer()         // 關閉mongodb

或者

> db.adminCommand({shutdown : 1, force : true})
> //or
> db.shutdownServer({force : true})

> db.adminCommand(shutdown : 1, force : true, timeoutsec : 5)        // 逾時關閉
> //or
> db.shutdownServer({force : true, timeoutsec : 5})

6) 用戶端啟動

預設啟動: ./bin/mongo

指定連接埠啟動: ./bin/mongo --port 27000

7) 備份與恢複

$ sudo ./bin/mongodump -d foo -o /opt/mongodb-2.2.3/bk/                  // 備份到bk目錄connected to: 127.0.0.1Tue Feb  5 20:58:13 DATABASE: foo to /opt/mongodb-2.2.3/bk/fooTue Feb  5 20:58:13 foo.foo_test to /opt/mongodb-2.2.3/bk/foo/foo_test.bsonTue Feb  5 20:58:13  1 objectsTue Feb  5 20:58:13 Metadata for foo.foo_test to /opt/mongodb-2.2.3/bk/foo/foo_test.metadata.json$ ./bin/mongorestore -d foo -c foo_test /opt/mongodb-2.2.3/bk/foo/foo_test.bson          // 恢複foo_test集合connected to: 127.0.0.1Tue Feb  5 20:58:20 /opt/mongodb-2.2.3/bk/foo/foo_test.bsonTue Feb  5 20:58:20 going into namespace [foo.foo_test]Tue Feb  5 20:58:20 warning: Restoring to foo.foo_test without dropping. Restored data will be inserted without raising errors; check your server logTue Feb  5 20:58:20 WARNING: collection foo.foo_test exists with different options than are in the metadata.json file and not using --drop. Options in the metadata file will be ignored.1 objects foundTue Feb  5 20:58:20 Creating index: { key: { _id: 1 }, ns: "foo.foo_test", name: "_id_" }

5, 命令樣本

1) 啟動服務端

sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/

2) 啟動用戶端

./bin/mongo

3) 用戶端簡單命令

協助: help

顯示資料庫: show dbs;

選擇資料庫: use test;

插入資料: db.foo.save({homer:2}); 

查詢: db.foo.find();

結果: { "_id" : ObjectId("511078ad857b699e9eaaf516"), "homer" : 2 }

更新: db.foo.update({"homer":2},{"homer":3});         // ( {}, {} ) 第一個{}是查詢條件,第二個{}是重新賦值

結果: { "_id" : ObjectId("511078ad857b699e9eaaf516"), "homer" : 3 }

刪除: db.foo.remove({"homer":3});

複合插入:

> t={"homer":2, "name" : {"name1" : "yang", "name2" : "gang"} }
{ "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }
> db.foo.insert(t);
> db.foo.find();
{ "_id" : ObjectId("5110d3e0af69ad089b234001"), "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }

複合查詢:

> db.foo.find();              // 先查看集合中所有記錄
{ "_id" : ObjectId("5110ca1aaf69ad089b233fff"), "homer" : 222 }
{ "_id" : ObjectId("5110caffaf69ad089b234000"), "homer" : 222 }
{ "_id" : ObjectId("5110d3e0af69ad089b234001"), "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }

> db.foo.find({"homer":2});           // 查詢包含特定內容的記錄
{ "_id" : ObjectId("5110d3e0af69ad089b234001"), "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }

MongoDB建立完整樣本:

> use test2                // test2資料庫不存在也可以執行,但不會立刻建立,需要執行insert操作時才建立switched to db test2> show dbs                 // 沒有test2,表明不是立刻建立local(empty)test0.0625GB>> db                       // 顯示當前正在使用的資料庫,test2不存在但正在使用中test2> db.createCollection("t2_test")     // 建立集合{ "ok" : 1 }> t={"name": "yanggang", "sex" : "male", "lover" : { "lover1" : "little dog", "lover2" : "fish" }}           // 初始化集合資料{"name" : "yanggang","sex" : "male","lover" : {"lover1" : "little dog","lover2" : "fish"}}> db.t2_test.insert(t)            // 插入資料,此刻才會建立test2資料庫> db.t2_test.find()               // 查詢{ "_id" : ObjectId("5110d685af69ad089b234002"), "name" : "yanggang", "sex" : "male", "lover" : { "lover1" : "little dog", "lover2" : "fish" } }> show dbs                        // 查看資料庫,多了test2local(empty)test0.0625GBtest20.0625GB

MongoDB刪除樣本:

> show collections        // 顯示集合system.indexest2_test> db.t2_test.drop()       // 刪除集合t2_testtrue> show collections        // 驗證刪除成功system.indexes> db.test2.remove()> show dbs                // 顯示資料庫local(empty)test0.0625GBtest20.0625GB> db                      // 顯示當前資料庫test2> db.dropDatabase()       // 刪除資料庫{ "dropped" : "test2", "ok" : 1 }> show dbs                // 驗證刪除成功local(empty)test0.0625GB

MongoDB 索引

> db.foo.find(){ "_id" : ObjectId("5110ca1aaf69ad089b233fff"), "homer" : 222 }{ "_id" : ObjectId("5110caffaf69ad089b234000"), "homer" : 222 }{ "_id" : ObjectId("5110d3e0af69ad089b234001"), "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }> db.foo.getIndexes()// 查看索引(_id為預設,不可刪除和修改)[{"v" : 1,"key" : {"_id" : 1},"ns" : "test.foo","name" : "_id_"}]> db.foo.ensureIndex({"homer":1})// 建立索引> db.foo.getIndexes()// 驗證建立索引[{"v" : 1,"key" : {"_id" : 1},"ns" : "test.foo","name" : "_id_"},{"v" : 1,"key" : {"homer" : 1},"ns" : "test.foo","name" : "homer_1"}]> db.foo.dropIndex({"homer":1})// 刪除索引{ "nIndexesWas" : 2, "ok" : 1 }> db.foo.getIndexes()// 驗證刪除索引[{"v" : 1,"key" : {"_id" : 1},"ns" : "test.foo","name" : "_id_"}]

6, 應用樣本

> db.foo_test.insert({"homer":1})> for(var i = 1; i<=5; i++) db.foo_test.save({"homer":2, "score":i})            // 數組產生> db.foo_test.find(){ "_id" : ObjectId("5111016cc0e386db7d954ae7"), "homer" : 1 }{ "_id" : ObjectId("5111030f0e2d3a50c56b49a9"), "homer" : 2, "score" : 6 }{ "_id" : ObjectId("511103200e2d3a50c56b49aa"), "homer" : 2, "score" : 1 }{ "_id" : ObjectId("511103200e2d3a50c56b49ab"), "homer" : 2, "score" : 2 }{ "_id" : ObjectId("511103200e2d3a50c56b49ac"), "homer" : 2, "score" : 3 }{ "_id" : ObjectId("511103200e2d3a50c56b49ad"), "homer" : 2, "score" : 4 }{ "_id" : ObjectId("511103200e2d3a50c56b49ae"), "homer" : 2, "score" : 5 }> > var cursor = db.foo_test.find(); while(cursor.hasNext())printjson(cursor.next());// 遍曆數組{ "_id" : ObjectId("5111016cc0e386db7d954ae7"), "homer" : 1 }{ "_id" : ObjectId("5111030f0e2d3a50c56b49a9"), "homer" : 2, "score" : 6 }{ "_id" : ObjectId("511103200e2d3a50c56b49aa"), "homer" : 2, "score" : 1 }{ "_id" : ObjectId("511103200e2d3a50c56b49ab"), "homer" : 2, "score" : 2 }{ "_id" : ObjectId("511103200e2d3a50c56b49ac"), "homer" : 2, "score" : 3 }{ "_id" : ObjectId("511103200e2d3a50c56b49ad"), "homer" : 2, "score" : 4 }{ "_id" : ObjectId("511103200e2d3a50c56b49ae"), "homer" : 2, "score" : 5 }> > var cursor = db.foo_test.find(); printjson(cursor[4])// 查詢(迭代){ "_id" : ObjectId("511103200e2d3a50c56b49ac"), "homer" : 2, "score" : 3 }> var arr = db.foo_test.find().toArray(); arr[5]// 查詢(數組){ "_id" : ObjectId("511103200e2d3a50c56b49ad"), "homer" : 2, "score" : 4 }> db.foo_test.find().limit(3)// 查詢(前三){ "_id" : ObjectId("5111016cc0e386db7d954ae7"), "homer" : 1 }{ "_id" : ObjectId("5111030f0e2d3a50c56b49a9"), "homer" : 2, "score" : 6 }{ "_id" : ObjectId("511103200e2d3a50c56b49aa"), "homer" : 2, "score" : 1 }

參考推薦:

MongoDB (官方)

MongoDB學習筆記

mongod參數說明

MongoDB應用

MongoDB中索引的用法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.