一.簡介
十多年的自貢網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。網(wǎng)絡營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整自貢建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“自貢網(wǎng)站設計”,“自貢網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
MongoDB一種非關系型數(shù)據(jù)庫(NOSQL),是一種強大、靈活、可擴展的數(shù)據(jù)存儲方式,因為MongoDB是文檔模型,自由靈活很高,可以讓你在開發(fā)過程中暢順無比,對于大數(shù)據(jù)量、高并發(fā)、弱事務的互聯(lián)網(wǎng)應用,MongoDB可以應對自如,MongoDB內(nèi)置的水平擴展機制提供了從百萬到十億級別的數(shù)據(jù)量處理能力,還對MapReduce式聚合的支持,以及對地理空間索引的支持。
1.1、為什么需要NoSQL
簡單的說,就是為了解決在web2.0時代,出現(xiàn)的三高要求:
1:對數(shù)據(jù)庫高并發(fā)讀寫的需求
2:對海量數(shù)據(jù)的高效率存儲和訪問的需求
3:對數(shù)據(jù)庫的高可擴展性和高可用性的需求
而RDB(關系型數(shù)據(jù)庫)里面的一些特性,在web2.0里面往往變得不那么重要,比如:
1:數(shù)據(jù)庫事務一致性
2:數(shù)據(jù)庫的實時讀寫
3:復雜的SQL查詢,特別是多表關聯(lián)查詢
1.2、CAP定理
CAP定理, 又被稱作布魯爾定理(Eric Brewer)它指出對于一個分布式計算系統(tǒng)來說,不可能同時滿足以下三點:
1:強一致性(Consistency):系統(tǒng)在執(zhí)行過某項操作后仍然處于一致的,在分布式系統(tǒng)中,更新操作執(zhí)行成功后所有的用戶都應該讀取到最新的值,這樣的系統(tǒng)被認為具有強一致性
2:可用性(Availability):每一個操作總是能夠在一定的時間內(nèi)返回結(jié)果
3:分區(qū)容錯性(Partition tolerance):系統(tǒng)在存在網(wǎng)絡分區(qū)的情況下仍然可以接受請求并處理,這里網(wǎng)絡分區(qū)是指由于某種原因網(wǎng)絡被分成若干個孤立區(qū)域,而區(qū)域之間互不相通
根據(jù)CAP原理將數(shù)據(jù)庫分成了滿足CA原則、滿足CP原則和滿足AP原則三大類:
1:CA:單點集群,滿足一致性,可用性,通常在可擴展性上不太強大,比如RDB
2:CP:滿足一致性和分區(qū)容錯性,通常性能不是特別高,如分布式數(shù)據(jù)庫
3:AP:滿足可用性和分區(qū)容錯性,通??赡軐σ恢滦砸蟮鸵恍绱蠖鄶?shù)的NoSQL
BASE原理(Basically Available,Soft-state,Eventual consistency )
1:基本可用(Basically Available):系統(tǒng)能夠基本運行、一直提供服務。
2:軟狀態(tài)(Soft-state):系統(tǒng)不要求一直保持強一致狀態(tài)。
3:最終一致性(Eventual consistency):系統(tǒng)需要在某一時刻后達到一致性要求
1.3、NoSQL的優(yōu)缺點
優(yōu)點
1、擴展簡單方便,尤其是水平橫向擴展
(縱向擴展是指用更強的機器;橫向擴展是指把數(shù)據(jù)分散到多個機器)
2、讀寫快速高效,多數(shù)都會映射到內(nèi)存操作
3、成本低廉,用普通機器,分布式集群即可
4、數(shù)據(jù)模型靈活,沒有固定的數(shù)據(jù)模型
NoSQL的缺點
不提供對SQL的支持
現(xiàn)有產(chǎn)品還不夠成熟穩(wěn)定,功能也還有待加強
1.4、mongodb的特點
高性能、易于使用、易于擴展、功能豐富
面向集合存儲,模式自由
支持動態(tài)查詢,支持javascript表達式查詢
支持完全索引,包含內(nèi)部對象
支持復制和故障恢復
支持副本集復制和自動故障恢復
自動處理分片
使用高效的二進制數(shù)據(jù)儲存,包括大型對象
文件存儲格式為BSON(一種JSON的擴展)
二.基本概念
數(shù)據(jù)庫
MongoDB的一個實例可以擁有一個或多個相互獨立的數(shù)據(jù)庫,每個數(shù)據(jù)庫都有自己的集合
文檔(document):是MongoDB中數(shù)據(jù)的基本單元
非常類似于關系型數(shù)據(jù)庫系統(tǒng)中的行(但是比行要復雜的多)
注意:
每一個文檔都有一個特殊的鍵”_id”,它在文檔所處的集合中是唯一的,相當于關
系數(shù)據(jù)庫中的表的主鍵
集合(collection):就是一組文檔
類似于關系型數(shù)據(jù)庫系統(tǒng)中的表
_id
每個文檔都有個特殊的“_id”,在文檔所屬集合中是唯一的
JavaScript shell
MongoDB自帶了一個功能強大的JavaScript Shell,可以用于管理或操作MongoDB
MongoDB的單個計算機可以容納多個獨立的數(shù)據(jù)庫,每一個數(shù)據(jù)庫都有自己的集合和權(quán)限。
MongoDB自帶簡介但功能強大的JavaScript shell,這個工具對于管理MongoDB實例和操作數(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、鍵不能重復
注意:文檔的鍵值對是有順序的,相同的鍵值對如果有不同順序的話,也是不同的文檔
3.4、數(shù)據(jù)類型
數(shù)據(jù)類型 描述 舉例
null 表示空值或者未定義的對象 {"x":null}
布爾值 真或者假:true或者false {"x":true}
32位整數(shù) shell不支持該類型,默認會轉(zhuǎn)換成64位浮點數(shù),也可以使用NumberInt類,比如: {“x”:NumberInt(“3”)}
64位整數(shù) shell不支持該類型,默認會轉(zhuǎn)換成64位浮點數(shù),也可以使用NumberLong類,比如: {“x”:NumberLong(“3”)}
64位浮點數(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()}
日期 從標準紀元開始的毫秒數(shù) {"date":new Date()}
正則表達式 文檔中可以包含正則表達式,遵循JavaScript的語法 {"foo":/foobar/i}
代碼 文檔中可以包含JavaScript代碼 {"x":function() {}}
未定義 undefined {"x":undefined}
數(shù)組 值的集合或者列表 {"arr": ["a","b"]}
內(nèi)嵌文檔 文檔可以作為文檔中某個key的value {"x":{"foo":"bar"}}