MongoDB的一些觀念

MongoDB的一些觀念

一、MongoDB特色

MongoDB是文件導向的資料庫,為目前NoSQL眾多選擇中,以文件儲存資料擅長。

在資料暴漲時代,資料庫如何提高可用性及擴充的高彈性,一直都是相當高深而且花錢的事,甚至錢花了,買來的是更多的管理及心理上的負擔。

MongoDB設計的初衷,正是為了要容易擴充出去的目的而設計的。當學會Sharding的指令之後,對過往花費相當多心力及金錢投注在Cluster的部分資訊人員而言,如釋重負。

其以document導向的資料模組設計,能輕易將資料分散其他伺服器,共同分擔。如此一來,開發者能更專注在程式的開發上,而不是在scaling上,搞得焦頭爛額。當他們發現需要更多的負載能力時,加入一台新電腦到這個Sharding群組中,MongoDB就會算出該如何組織一切。

 

二、基礎觀念

1.單位

image

基本單位是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” }

image

2個key

{ “customName”:”john” , “customID”:123 }

其餘類推…

另外 UTF-8 允許成為 key name,例如下圖是合法的。

image

但是

“\0”、”.”、”$” 均有特殊用途,不可作為key使用。

“_” 作為開頭也盡量避免!

 

7.區分大小寫

 

8.同一個document內,不可以有重複的key

以下是不合法的

image

 

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

image

11.特殊db

在MongoDB內,有幾個特殊內建的DB,有其作用,db在命名時應避開。

a.admin:這是一個相當於”root”的db,凡加入的使用者將自動取得MongoDB的administrator權限。在 Security 部分會提到。

b.local:凡隸屬其中的 collections,不會被同步到其他叢集電腦上,只會存在單機裡。在 Replication 會提到。

c.config:使用在分片技術中。在 Sharding 會提到。

 

12.命名空間

以前面資訊部門文件庫為例

image

要存取 erp 這個 collection,其存取命名空間就是(db本身就代表了當前操作的所在資料庫)。

db.it.erp

命名空間長度理論上不可超過121 bytes。但實務上建議不要超過100 bytes。