【MangoDB】介紹與安裝

1、MangoDB簡介

  MongoDB是一個面向文檔(document-oriented)的數據庫,而不是關係型數據庫。 不採用關係型主要是爲了得到更好得擴展性。固然還有一些其餘好處,與關係數據庫相比,面向文檔的數據庫再也不有「行「(row)的概念取而代之的是更爲靈活的「文檔」(document)模型。 經過在文檔中嵌入文檔和數組,面向文檔的方法可以僅使用一條記錄來表現複雜的層級關係,這與現代的面嚮對象語言的開發者對數據的見解一致。 另外,再也不有預約義模式(predefined schema):文檔的鍵(key)和值(value)再也不是固定的類型和大小。因爲沒有固定的模式,根據須要添加或刪除字段變得更容易了。一般因爲開發者可以進行快速迭代,因此開發進程得以加快。並且,實驗更容易進行。開發者能嘗試大量的數據模型,從中選一個最好的。html

2、易擴展

應用程序數據集的大小正在以難以想象的速度增加。隨着可用帶寬的增加和存儲器價格的降低,即便是一個小規模的應用程序,須要存儲的數據量也可能大的驚人,甚至超出了不少數據庫的處理能力。過去很是罕見的T級數據,如今已是司空見慣了。 因爲須要存儲的數據量不斷增加,開發者面臨一個問題:應該如何擴展數據庫,分爲縱向擴展和橫向擴展,縱向擴展是最省力的作法,但缺點是大型機通常都很是貴,並且當數據量達到機器的物理極限時,花再多的錢也買不到更強的機器了,此時選擇橫向擴展更爲合適,但橫向擴展帶來的另一個問題就是須要管理的機器太多。 MongoDB的設計採用橫向擴展。面向文檔的數據模型使它能很容易地在多臺服務器之間進行數據分割。MongoDB可以自動處理跨集羣的數據和負載,自動從新分配文檔,以及將 用戶的請求路由到正確的機器上。這樣,開發者可以集中精力編寫應用程序,而不須要考慮如何擴展的問題。若是一個集羣須要更大的容量,只須要向集羣添加新服務器,MongoDB就會自動將現有的數據向新服務器傳送。mysql

 

3、功能全

MongoDB做爲一款通用型數據庫,除了可以建立、讀取、更新和刪除數據以外,還提供了一系列不斷擴展的獨特功能sql

一、索引mongodb

支持通用二級索引,容許多種快速查詢,且提供惟一索引、複合索引、地理空間索引、全文索引數據庫

二、聚合數組

支持聚合管道,用戶能經過簡單的片斷建立複雜的集合,並經過數據庫自動優化瀏覽器

三、特殊的集合類型緩存

支持存在時間有限的集合,適用於那些將在某個時刻過時的數據,如會話session。相似地,MongoDB也支持固定大小的集合,用於保存近期數據,如日誌安全

四、文件存儲服務器

支持一種很是易用的協議,用於存儲大文件和文件元數據。MongoDB並不具有一些在關係型數據庫中很廣泛的功能,如連接join和複雜的多行事務。省略 這些的功能是處於架構上的考慮,或者說爲了獲得更好的擴展性,由於在分佈式系統中這兩個功能難以高效地實現。

4、卓越的性能

MongoDB的一個主要目標是提供卓越的性能,這很大程度上決定了MongoDB的設計。MongoDB把儘量多的內存用做緩存cache,視圖爲每次查詢自動選擇正確的索引。 總之各方面的設計都旨在保持它的高性能 雖然MongoDB很是強大並試圖保留關係型數據庫的不少特性,但它並不追求具有關係型數據庫的全部功能。只要有可能,數據庫服務器就會將處理邏輯交給客戶端。這種精簡方式的設計是MongoDB可以實現如此高性能的緣由之一。

5、重要概念

 

6、注意事項

須要注意的是:
#一、文檔中的鍵/值對是有序的。
#二、文檔中的值不只能夠是在雙引號裏面的字符串,還能夠是其餘幾種數據類型(甚至能夠是整個嵌入的文檔)。
#三、MongoDB區分類型和大小寫。
#四、MongoDB的文檔不能有重複的鍵。
#五、文檔中的值能夠是多種不一樣的數據類型,也能夠是一個完整的內嵌文檔。文檔的鍵是字符串。除了少數例外狀況,鍵可使用任意UTF-8字符。

文檔鍵命名規範:
#一、鍵不能含有\0 (空字符)。這個字符用來表示鍵的結尾。
#二、.和$有特別的意義,只有在特定環境下才能使用。
#三、如下劃線"_"開頭的鍵是保留的(不是嚴格要求的)。

7、下載安裝

4.0下載地址: https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.8-signed.msi

安裝時去除多餘的組件安裝提升速度:

 

 

此時MongoDB已經開啓,瀏覽器訪問http://localhost:27017/,頁面上輸出: It looks like you are trying to access MongoDB over HTTP on the native driver port.

說明MongoDB已經啓動了,且它的默認端口(27017)沒有被佔用。

開始使用:

運行bin下的終端程序mongo.exe 其與mysql性質相同都是客戶端!

'mongo' 看見歡迎信息則說明登陸成功

此時沒有任何的權限限制,默認是管理員角色。

8、建立帳號

#一、建立帳號
use admin 
db.createUser(
  {
    "user": "root",
    "pwd": "123",
    "roles": [ { "role": "root","db": "admin" } ]
  }
)

use test
db.createUser(
  {
    "user": "jerry",
    "pwd": "123",
    "roles": [ { "role": "readWrite", db: "test" },
             { "role": "read", "db": "db1" } ]
  }
)

在mongodb中用不一樣的數據庫來區分權限,要管理哪一個數據庫就在哪一個數據庫下建立用戶便可,建立管理員帳戶則在admin下建立!
db 是一個全局變量 表示當前數據庫
db.createUser()是調用一個內部函數用於建立用戶
每一個帳號能夠具有多個角色
更多角色請見:http://www.javashuo.com/article/p-cqbjelkg-cv.html

9、開啓帳號認證

默認狀況下mongodb不會加載認證信息就像mysql跳過受權表同樣,建立完帳號用戶須要開啓用戶認證。

具體方法:

  修改配置文檔mongod.cfg(位置:安裝目錄\bin下)

  首先,將bind_ip改成0.0.0.0(讓其餘電腦能夠訪問,用於遠程鏈接)

security:
    authorization: enabled
# 注意縮進

而後找到#secuity:改爲下圖所示,開啓安全認證。

 

而後重啓MongDB Server服務,啓用認證。

10、帳號測試

#直接mongo進入程序  已經沒法查看數據庫

show dbs 
#登陸方式1:  authenticationDatabase指定數據庫
mongo --port 27017 -u "root" -p "123" --authenticationDatabase "admin"

#登陸方式2:進入mongo後,進入某個數據庫中,再輸入密碼
use admin
db.auth("root","123")

#刪除帳號
db.dropUser('用戶名');

#修改密碼
db.changeUserPassword(用戶名, 新密碼);
相關文章
相關標籤/搜索