NoSQL數(shù)據(jù)庫(kù)有哪些種類
- 文檔型數(shù)據(jù)庫(kù)
文檔型數(shù)據(jù)庫(kù)采用文檔的方式來(lái)存儲(chǔ)數(shù)據(jù),即將單個(gè)實(shí)體的所有數(shù)據(jù)都存在一個(gè)文檔中,而文檔存在于集合中。
MongoDB - “鍵值對(duì)”(Key-Value)數(shù)據(jù)庫(kù)
“鍵值對(duì)”數(shù)據(jù)庫(kù)主要是使用數(shù)據(jù)結(jié)構(gòu)中的鍵來(lái)查找特定的值
優(yōu)點(diǎn):這類數(shù)據(jù)庫(kù)在存儲(chǔ)時(shí)不采用任何模式,因此極易添加數(shù)據(jù)
缺點(diǎn):通過(guò)“鍵”和“值”一對(duì)一查找時(shí)性能較高,但只針對(duì)“值”來(lái)查找時(shí)性能會(huì)比較差
Redis、Voldemort、Scalaris、Oracle Berkeley DB - 列存儲(chǔ)數(shù)據(jù)庫(kù)
列存儲(chǔ)數(shù)據(jù)庫(kù)是以“列”為單位來(lái)存儲(chǔ)數(shù)據(jù)的。相對(duì)與行存儲(chǔ)的數(shù)據(jù)庫(kù),它更適合用于批量數(shù)據(jù)處理與實(shí)時(shí)數(shù)據(jù)查詢
優(yōu)點(diǎn):同一列數(shù)據(jù)的格式相同,所以適合數(shù)據(jù)壓縮,也更善于處理大量數(shù)據(jù)的查詢與計(jì)算,切有利于分布式擴(kuò)展
缺點(diǎn):不適合做實(shí)時(shí)的刪除或更新操作
Sybase IQ、Vertica - 圖存儲(chǔ)數(shù)據(jù)庫(kù)
圖存儲(chǔ)數(shù)據(jù)庫(kù),采用圖形理論來(lái)存儲(chǔ)尸體之間的關(guān)系信息,如社交關(guān)系網(wǎng)絡(luò)、族譜
Neo4j、FlockDB、GraphDB
MongoDB簡(jiǎn)介
MongoDB有哪些特性
存儲(chǔ)結(jié)構(gòu)
- MongoDB采用“集合”來(lái)存儲(chǔ)文檔數(shù)據(jù)
- 文檔的存儲(chǔ)架構(gòu)是基于JSON改良的BSON
- MongoDB可以存儲(chǔ)無(wú)模式的文檔,不需要事先定義數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型。
- MongoDB能讓使用者根據(jù)應(yīng)用程序的存取需求來(lái)設(shè)置反正規(guī)化的數(shù)據(jù)結(jié)構(gòu),以加快查詢速度
數(shù)據(jù)查詢
- 除了單表查詢功能,還支持強(qiáng)大的聚合計(jì)算(sum/avg/count/group等),以及大數(shù)據(jù)引擎中常見(jiàn)的映射和歸納(MapReduce)
- MongoDB可以在特定的集合字段上添加索引,以提升查詢的性能
- 支持多種程序語(yǔ)言操作
數(shù)據(jù)庫(kù)架構(gòu)
- MongoDB集群具有副本集的架構(gòu),可以實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)備援、故障轉(zhuǎn)移等,能確保服務(wù)不會(huì)長(zhǎng)時(shí)間中斷或發(fā)生數(shù)據(jù)丟失的情況
- MongoDB支持?jǐn)?shù)據(jù)塊自動(dòng)切分,可以實(shí)現(xiàn)橫向擴(kuò)容、能保證數(shù)據(jù)存儲(chǔ)于王文的負(fù)載均衡。雖然數(shù)據(jù)是分布式存儲(chǔ)的,但對(duì)應(yīng)用程序來(lái)說(shuō),仍可以通過(guò)統(tǒng)一的路由來(lái)訪問(wèn)數(shù)據(jù)
MongoDB的使用場(chǎng)景
- 需要處理大量的低價(jià)值數(shù)據(jù),且對(duì)數(shù)據(jù)處理性能有較高要求
- 需要借助緩存層來(lái)處理數(shù)據(jù)
- 需要高度的伸縮性
MongoDB中的對(duì)象
數(shù)據(jù)庫(kù) Database
默認(rèn)數(shù)據(jù)庫(kù)test,在使用use <databasename>時(shí),會(huì)切換到某個(gè)數(shù)據(jù)庫(kù),如果數(shù)據(jù)庫(kù)不存在,會(huì)自動(dòng)創(chuàng)建
集合 Collenction
MongoDB是面向集合的存儲(chǔ)。在儲(chǔ)存數(shù)據(jù)時(shí),MongoDB會(huì)使用集合在做分類,在集合中可以儲(chǔ)存許多文檔
集合對(duì)應(yīng)表(Table),不過(guò)集合不需要事先定義模式(Schema)
文檔 Document
文檔是MongoDB存儲(chǔ)數(shù)據(jù)的最基本單元,相當(dāng)于行(Row)。文檔內(nèi)包括一至多個(gè)“鍵值對(duì)”。每個(gè)“鍵”為一個(gè)字段(Field)。字段的值可以是數(shù)值,字符串,數(shù)組或者子文檔等
視圖 (View)
視圖與查詢集合的結(jié)果相同,但視圖并非實(shí)際存在的集合,而是通過(guò)指令來(lái)構(gòu)建數(shù)據(jù)查詢得出的結(jié)果。
索引(Index)
MongoDB索引的使用方法和原理都于傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的索引相同。MongoDB還支持地理空間索引,以提升查詢平面或球面坐標(biāo)的速度。
用戶(User)
如果MongoDB開(kāi)啟了安全認(rèn)證,在會(huì)在數(shù)據(jù)庫(kù)中產(chǎn)生用戶表。在MongoDB中,每個(gè)數(shù)據(jù)庫(kù)都有獨(dú)立的用戶表
存儲(chǔ)過(guò)程(Stored Procedure)
MongoDB的存儲(chǔ)過(guò)程是用JavaScript撰寫的,存儲(chǔ)在system.js集合中,具有輸入/輸出參數(shù)、嵌套調(diào)用等特性,可提供應(yīng)用程序調(diào)用
字段(Field)
字段是MongoDB文檔中的元素,相當(dāng)于關(guān)系型數(shù)據(jù)庫(kù)中的“列”(Column)。在MongoDB中,字段可以添加的增加或減少,不需要事先定義
MongoDB與關(guān)系型數(shù)據(jù)庫(kù)的術(shù)語(yǔ)對(duì)應(yīng)關(guān)系
| MongoDB | 關(guān)系型數(shù)據(jù)庫(kù) |
|---|---|
| database(數(shù)據(jù)庫(kù)) | database(數(shù)據(jù)庫(kù)) |
| collection(集合) | table(表) |
| document(文檔) | row(行) |
| field(字段) | column(列) |
| View(視圖) | View(視圖) |
| User(用戶) | User(用戶) |
| Stored Procedure(預(yù)存程序) | Stored Procedure(預(yù)存程序) |