溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2020-06-23 07:44:47 來源:網(wǎng)絡(luò) 閱讀:750 作者:我愛大金子 欄目:數(shù)據(jù)庫

一.簡介

  MongoDB一種非關(guān)系型數(shù)據(jù)庫(NoSql),是一種強(qiáng)大、靈活、可擴(kuò)展的數(shù)據(jù)存儲方式,因?yàn)镸ongoDB是文檔模型,自由靈活很高,可以讓你在開發(fā)過程中暢順無比,對于大數(shù)據(jù)量、高并發(fā)、弱事務(wù)的互聯(lián)網(wǎng)應(yīng)用,MongoDB可以應(yīng)對自如,MongoDB內(nèi)置的水平擴(kuò)展機(jī)制提供了從百萬到十億級別的數(shù)據(jù)量處理能力,還對MapReduce式聚合的支持,以及對地理空間索引的支持。


1.1、為什么需要NoSQL

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

 1:對數(shù)據(jù)庫高并發(fā)讀寫的需求

 2:對海量數(shù)據(jù)的高效率存儲和訪問的需求

 3:對數(shù)據(jù)庫的高可擴(kuò)展性和高可用性的需求

而RDB(關(guān)系型數(shù)據(jù)庫)里面的一些特性,在web2.0里面往往變得不那么重要,比如:

 1:數(shù)據(jù)庫事務(wù)一致性

 2:數(shù)據(jù)庫的實(shí)時讀寫

 3:復(fù)雜的SQL查詢,特別是多表關(guān)聯(lián)查詢

1.2、CAP定理

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

 1:強(qiáng)一致性(Consistency):系統(tǒng)在執(zhí)行過某項(xiàng)操作后仍然處于一致的,在分布式系統(tǒng)中,更新操作執(zhí)行成功后所有的用戶都應(yīng)該讀取到最新的值,這樣的系統(tǒng)被認(rèn)為具有強(qiáng)一致性

 2:可用性(Availability):每一個操作總是能夠在一定的時間內(nèi)返回結(jié)果

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


根據(jù)CAP原理將數(shù)據(jù)庫分成了滿足CA原則、滿足CP原則和滿足AP原則三大類:

 1:CA:單點(diǎn)集群,滿足一致性,可用性,通常在可擴(kuò)展性上不太強(qiáng)大,比如RDB

 2:CP:滿足一致性和分區(qū)容錯性,通常性能不是特別高,如分布式數(shù)據(jù)庫

 3:AP:滿足可用性和分區(qū)容錯性,通??赡軐σ恢滦砸蟮鸵恍?,如大多數(shù)的NoSQL


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

 1:基本可用(Basically Available):系統(tǒng)能夠基本運(yùn)行、一直提供服務(wù)。

 2:軟狀態(tài)(Soft-state):系統(tǒng)不要求一直保持強(qiáng)一致狀態(tài)。

 3:最終一致性(Eventual consistency):系統(tǒng)需要在某一時刻后達(dá)到一致性要求

1.3、NoSQL的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

 1、擴(kuò)展簡單方便,尤其是水平橫向擴(kuò)展

  (縱向擴(kuò)展是指用更強(qiáng)的機(jī)器;橫向擴(kuò)展是指把數(shù)據(jù)分散到多個機(jī)器)

 2、讀寫快速高效,多數(shù)都會映射到內(nèi)存操作

 3、成本低廉,用普通機(jī)器,分布式集群即可

 4、數(shù)據(jù)模型靈活,沒有固定的數(shù)據(jù)模型

NoSQL的缺點(diǎn)

 不提供對SQL的支持

 現(xiàn)有產(chǎn)品還不夠成熟穩(wěn)定,功能也還有待加強(qiáng)

1.4、mongodb的特點(diǎn)

高性能、易于使用、易于擴(kuò)展、功能豐富

面向集合存儲,模式自由

支持動態(tài)查詢,支持javascript表達(dá)式查詢

支持完全索引,包含內(nèi)部對象

支持復(fù)制和故障恢復(fù)

支持副本集復(fù)制和自動故障恢復(fù)

自動處理分片

使用高效的二進(jìn)制數(shù)據(jù)儲存,包括大型對象

文件存儲格式為BSON(一種JSON的擴(kuò)展)

二.基本概念

數(shù)據(jù)庫

 MongoDB的一個實(shí)例可以擁有一個或多個相互獨(dú)立的數(shù)據(jù)庫,每個數(shù)據(jù)庫都有自己的集合


文檔(document):是MongoDB中數(shù)據(jù)的基本單元

非常類似于關(guān)系型數(shù)據(jù)庫系統(tǒng)中的行(但是比行要復(fù)雜的多)

注意:

每一個文檔都有一個特殊的鍵_id,它在文檔所處的集合中是唯一的,相當(dāng)于關(guān)

系數(shù)據(jù)庫中的表的主鍵

 

集合(collection:就是一組文檔

類似于關(guān)系型數(shù)據(jù)庫系統(tǒng)中的表


_id

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

JavaScript shell

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


MongoDB的單個計(jì)算機(jī)可以容納多個獨(dú)立的數(shù)據(jù)庫,每一個數(shù)據(jù)庫都有自己的集合和權(quán)限。

MongoDB自帶簡介但功能強(qiáng)大的JavaScript shell,這個工具對于管理MongoDB實(shí)例和操作數(shù)據(jù)作用非常大

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

三.規(guī)則與數(shù)據(jù)類型

3.1、數(shù)據(jù)庫名稱定義規(guī)則

1、不能是空串

2、不得含有/、\、?、$、空格、空字符等等,基本只能使用ASCII中的字母和數(shù)字

3、區(qū)分大小寫,建議全部小寫

4、最多為64字節(jié)

5、不得使用保留的數(shù)據(jù)庫名,比如:admin,local,config

注意:數(shù)據(jù)庫最終會成為文件,數(shù)據(jù)庫名就是文件的名稱

3.2、集合名稱定義規(guī)則

1、不能是空串

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

3、不能以”system.”開頭,這是為系統(tǒng)集合保留的前綴

3.3、文檔的鍵的定義規(guī)則

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

2、“.”和“$”是被保留的,只能在特定環(huán)境下用

3、區(qū)分類型,同時也區(qū)分大小寫

4、鍵不能重復(fù)

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

3.4、數(shù)據(jù)類型

數(shù)據(jù)類型                描述                                     舉例

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

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

32位整數(shù)            shell不支持該類型,默認(rèn)會轉(zhuǎn)換成64位浮點(diǎn)數(shù),也可以使用NumberInt類,比如:     {“x”:NumberInt(“3”)}

64位整數(shù)            shell不支持該類型,默認(rèn)會轉(zhuǎn)換成64位浮點(diǎn)數(shù),也可以使用NumberLong類,比如:     {“x”:NumberLong(“3”)}

64位浮點(diǎn)數(shù)          shell中的數(shù)字就是這一種類型                             {"x":3.14,"y":3}

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

符號             shell不支持,shell會將數(shù)據(jù)庫中的符號類型的數(shù)據(jù)自動轉(zhuǎn)換成字符串

對象id             文檔的12字節(jié)的唯一id                               {"id": ObjectId()}

日期             從標(biāo)準(zhǔn)紀(jì)元開始的毫秒數(shù)                               {"date":new Date()}

正則表達(dá)式          文檔中可以包含正則表達(dá)式,遵循JavaScript的語法                  {"foo":/foobar/i}

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

未定義             undefined                                    {"x":undefined}

數(shù)組             值的集合或者列表                                 {"arr": ["a","b"]}

內(nèi)嵌文檔           文檔可以作為文檔中某個key的value                          {"x":{"foo":"bar"}}

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI