MongoDB的一些觀念
一、MongoDB特色
MongoDB是文件導向的資料庫,為目前NoSQL眾多選擇中,以文件儲存資料擅長。
在資料暴漲時代,資料庫如何提高可用性及擴充的高彈性,一直都是相當高深而且花錢的事,甚至錢花了,買來的是更多的管理及心理上的負擔。
MongoDB設計的初衷,正是為了要容易擴充出去的目的而設計的。當學會Sharding的指令之後,對過往花費相當多心力及金錢投注在Cluster的部分資訊人員而言,如釋重負。
其以document導向的資料模組設計,能輕易將資料分散其他伺服器,共同分擔。如此一來,開發者能更專注在程式的開發上,而不是在scaling上,搞得焦頭爛額。當他們發現需要更多的負載能力時,加入一台新電腦到這個Sharding群組中,MongoDB就會算出該如何組織一切。
二、基礎觀念
1.單位
基本單位是document,如果要用現行資料庫觀念來理解的話
MongoDB | RDBMS | |
document | record | 相當於資料表中的一筆紀錄 |
collection | Table | 相當於一般資料庫開一個Table |
db | DB | 即相當於一個資料庫一個DB |
2.Schema-Free ( Collections )
但是在MongoDB的世界裡,Collection與一般資料庫的Table最大差異在於—Schema Free。
一般資料庫開Table必須定義欄位(大小、型別、名稱等),但是Collection完全不須要,也因為不須事先定義欄位,每筆document可以有不等數量的欄位,而存在同一個collection內。
3.每個執行MongoDB的實體,可以負責多個以上獨立的資料庫,每個資料庫都有其各自的collections及permissions。
4.簡易而強大的javascript shell
MongoDB並不像目前時下流行的資料庫有完整的UI介面。其預設類似於shell的文字介面管理,如同在終端機下管理linux一般。但其shell除了本身的指令外,javascript完全可以接受。
5.”_id”欄位
每個document必定會有一個最基本的特殊欄位 “_id” ,不管你喜不喜歡,它一定存在;在其所屬的collection底下,為唯一值。
6.document結構
一個document的結構非常簡單,基本結構就是一個key name,配一個key value。{ key1:value1 , key2:value2 , ……………………….. keyN:valueN }
單key
{ “customName”:”john” }
2個key
{ “customName”:”john” , “customID”:123 }
其餘類推…
另外 UTF-8 允許成為 key name,例如下圖是合法的。
但是
“\0”、”.”、”$” 均有特殊用途,不可作為key使用。
“_” 作為開頭也盡量避免!
7.區分大小寫
8.同一個document內,不可以有重複的key
以下是不合法的
9.collection取名限制
collection以其名稱作為識別,可以使用中英文字,但
a.不可使用空字串(“”)。
b.不可使用 ”\0”,因為在MongoDB中,其代表null的意思。
c.不可以 ”system.” 為開頭。這是保留字。
d.不可用 ”$”。
10.可以透過 subcollections ,來組織資料庫
例如
一個資訊部門文件庫
以it作為主collection
db.it
其下設erp、mis兩個 subcollection ,以方便組織分類
db.it.erp
do.it.mis
11.特殊db
在MongoDB內,有幾個特殊內建的DB,有其作用,db在命名時應避開。
a.admin:這是一個相當於”root”的db,凡加入的使用者將自動取得MongoDB的administrator權限。在 Security 部分會提到。
b.local:凡隸屬其中的 collections,不會被同步到其他叢集電腦上,只會存在單機裡。在 Replication 會提到。
c.config:使用在分片技術中。在 Sharding 會提到。
12.命名空間
以前面資訊部門文件庫為例
要存取 erp 這個 collection,其存取命名空間就是(db本身就代表了當前操作的所在資料庫)。
db.it.erp
命名空間長度理論上不可超過121 bytes。但實務上建議不要超過100 bytes。