天天看點

MongoDB(1): 安裝與配置及簡介

一.簡介

1.1、為什麼需要NoSQL

簡單的說,就是為了解決在web2.0時代,出現的三高要求:

 1:對資料庫高并發讀寫的需求

 2:對海量資料的高效率存儲和通路的需求

 3:對資料庫的高可擴充性和高可用性的需求

而RDB(關系型資料庫)裡面的一些特性,在web2.0裡面往往變得不那麼重要,比如:

 1:資料庫事務一緻性

 2:資料庫的實時讀寫

 3:複雜的SQL查詢,特别是多表關聯查詢

1.2、CAP定理

CAP定理, 又被稱作布魯爾定理(Eric Brewer)它指出對于一個分布式計算系統來說,不可能同時滿足以下三點:

 1:強一緻性(Consistency):系統在執行過某項操作後仍然處于一緻的,在分布式系統中,更新操作執行成功後所有的使用者都應該讀取到最新的值,這樣的系統被認為具有強一緻性

 2:可用性(Availability):每一個操作總是能夠在一定的時間内傳回結果

 3:分區容錯性(Partition tolerance):系統在存在網絡分區的情況下仍然可以接受請求并處理,這裡網絡分區是指由于某種原因網絡被分成若幹個孤立區域,而區域之間互不相通

根據CAP原理将資料庫分成了滿足CA原則、滿足CP原則和滿足AP原則三大類:

 1:CA:單點叢集,滿足一緻性,可用性,通常在可擴充性上不太強大,比如RDB

 2:CP:滿足一緻性和分區容錯性,通常性能不是特别高,如分布式資料庫

 3:AP:滿足可用性和分區容錯性,通常可能對一緻性要求低一些,如大多數的NoSQL

BASE原理(Basically Available,Soft-state,Eventual consistency )

 1:基本可用(Basically Available):系統能夠基本運作、一直提供服務。

 2:軟狀态(Soft-state):系統不要求一直保持強一緻狀态。

 3:最終一緻性(Eventual consistency):系統需要在某一時刻後達到一緻性要求

1.3、NoSQL的優缺點

優點

 1、擴充簡單友善,尤其是水準橫向擴充

  (縱向擴充是指用更強的機器;橫向擴充是指把資料分散到多個機器)

 2、讀寫快速高效,多數都會映射到記憶體操作

 3、成本低廉,用普通機器,分布式叢集即可

 4、資料模型靈活,沒有固定的資料模型

NoSQL的缺點

 不提供對SQL的支援

 現有産品還不夠成熟穩定,功能也還有待加強

1.4、mongodb的特點

高性能、易于使用、易于擴充、功能豐富

面向集合存儲,模式自由

支援動态查詢,支援javascript表達式查詢

支援完全索引,包含内部對象

支援複制和故障恢複

支援副本集複制和自動故障恢複

自動處理分片

使用高效的二進制資料儲存,包括大型對象

檔案存儲格式為BSON(一種JSON的擴充)

二.基本概念

資料庫

 MongoDB的一個執行個體可以擁有一個或多個互相獨立的資料庫,每個資料庫都有自己的集合

文檔(document):是MongoDB中資料的基本單元

非常類似于關系型資料庫系統中的行(但是比行要複雜的多)

注意:

每一個文檔都有一個特殊的鍵”_id”,它在文檔所處的集合中是唯一的,相當于關

系資料庫中的表的主鍵

集合(collection):就是一組文檔

類似于關系型資料庫系統中的表

_id

  每個文檔都有個特殊的“_id”,在文檔所屬集合中是唯一的

JavaScript shell

  MongoDB自帶了一個功能強大的JavaScript Shell,可以用于管理或操作MongoDB

MongoDB的單個計算機可以容納多個獨立的資料庫,每一個資料庫都有自己的集合和權限。

MongoDB自帶簡介但功能強大的JavaScript shell,這個工具對于管理MongoDB執行個體和操作資料作用非常大

注意:MongoDB中沒有主外鍵的概念

三.規則與資料類型

3.1、資料庫名稱定義規則

1、不能是空串

2、不得含有/、\、?、$、空格、空字元等等,基本隻能使用ASCII中的字母和數字

3、區分大小寫,建議全部小寫

4、最多為64位元組

5、不得使用保留的資料庫名,比如:admin,local,config

注意:資料庫最終會成為檔案,資料庫名就是檔案的名稱

3.2、集合名稱定義規則

2、不能包含\0字元(空字元),這個字元表示集合名的結束,也不能包含”$”

3、不能以”system.”開頭,這是為系統集合保留的字首

3.3、文檔的鍵的定義規則

1、不能包含\0字元(空字元),這個字元表示鍵的結束

2、“.”和“$”是被保留的,隻能在特定環境下用

3、區分類型,同時也區分大小寫

4、鍵不能重複

注意:文檔的鍵值對是有順序的,相同的鍵值對如果有不同順序的話,也是不同的文檔

3.4、資料類型

資料類型                描述                                     舉例

null              表示空值或者未定義的對象                              {"x":null}

布爾值            真或者假:true或者false                               {"x":true}

32位整數            shell不支援該類型,預設會轉換成64位浮點數,也可以使用NumberInt類,比如:     {“x”:NumberInt(“3”)}

64位整數            shell不支援該類型,預設會轉換成64位浮點數,也可以使用NumberLong類,比如:     {“x”:NumberLong(“3”)}

64位浮點數          shell中的數字就是這一種類型                             {"x":3.14,"y":3}

字元串            UTF-8字元串                                     {"foo":"bar"}

符号             shell不支援,shell會将資料庫中的符号類型的資料自動轉換成字元串

對象id             文檔的12位元組的唯一id                               {"id": ObjectId()}

日期             從标準紀元開始的毫秒數                               {"date":new Date()}

正規表達式          文檔中可以包含正規表達式,遵循JavaScript的文法                  {"foo":/foobar/i}

代碼             文檔中可以包含JavaScript代碼                            {"x":function() {}}

未定義             undefined                                    {"x":undefined}

數組             值的集合或者清單                                 {"arr": ["a","b"]}

内嵌文檔           文檔可以作為文檔中某個key的value                          {"x":{"foo":"bar"}}

本文轉自我愛大金子部落格51CTO部落格,原文連結http://blog.51cto.com/1754966750/1873355如需轉載請自行聯系原作者

我愛大金子