溫馨提示×

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

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

【NoSQL】01、NoSQL基礎(chǔ)

發(fā)布時(shí)間:2020-07-15 02:26:49 來(lái)源:網(wǎng)絡(luò) 閱讀:693 作者:xiexiaojun 欄目:數(shù)據(jù)庫(kù)


一、ACID、分布式、CAP、BASE 理論

關(guān)系型數(shù)據(jù)庫(kù)遵循ACID規(guī)則

       事務(wù)在英文中是transaction,和現(xiàn)實(shí)世界中的交易很類似,它有如下四個(gè)特性:

1、A (Atomicity) 原子性

        原子性很容易理解,也就是說(shuō)事務(wù)里的所有操作要么全部做完,要么都不做,事務(wù)成功的條件是事務(wù)里的所有操作都成功,只要有一個(gè)操作失敗,整個(gè)事務(wù)就失敗,需要回滾。

比如銀行轉(zhuǎn)賬,從A賬戶轉(zhuǎn)100元至B賬戶,分為兩個(gè)步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢(qián)會(huì)莫名其妙少了100元。

2、C (Consistency) 一致性

       一致性也比較容易理解,也就是說(shuō)數(shù)據(jù)庫(kù)要一直處于一致的狀態(tài),事務(wù)的運(yùn)行不會(huì)改變數(shù)據(jù)庫(kù)原本的一致性約束。

例如現(xiàn)有完整性約束a+b=10,如果一個(gè)事務(wù)改變了a,那么必須得改變b,使得事務(wù)結(jié)束后依然滿足a+b=10,否則事務(wù)失敗。

3、I (Isolation) 獨(dú)立性或隔離性

       所謂的獨(dú)立性是指并發(fā)的事務(wù)之間不會(huì)互相影響,如果一個(gè)事務(wù)要訪問(wèn)的數(shù)據(jù)正在被另外一個(gè)事務(wù)修改,只要另外一個(gè)事務(wù)未提交,它所訪問(wèn)的數(shù)據(jù)就不受未提交事務(wù)的影響。

比如現(xiàn)有有個(gè)交易是從A賬戶轉(zhuǎn)100元至B賬戶,在這個(gè)交易還未完成的情況下,如果此時(shí)B查詢自己的賬戶,是看不到新增加的100元的。

4、D (Durability) 持久性

        持久性是指一旦事務(wù)提交后,它所做的修改將會(huì)永久的保存在數(shù)據(jù)庫(kù)上,即使出現(xiàn)宕機(jī)也不會(huì)丟失。


分布式系統(tǒng)

       分布式系統(tǒng)(distributed system)由多臺(tái)計(jì)算機(jī)和通信的軟件組件通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)連接(本地網(wǎng)絡(luò)或廣域網(wǎng))組成。

分布式系統(tǒng)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng)。正是因?yàn)檐浖奶匦?,所以分布式系統(tǒng)具有高度的內(nèi)聚性和透明性。

因此,網(wǎng)絡(luò)和分布式系統(tǒng)之間的區(qū)別更多的在于高層軟件(特別是操作系統(tǒng)),而不是硬件。

分布式系統(tǒng)可以應(yīng)用在在不同的平臺(tái)上如:Pc、工作站、局域網(wǎng)和廣域網(wǎng)上等。


分布式計(jì)算的優(yōu)點(diǎn)

可靠性(容錯(cuò)) :

           分布式計(jì)算系統(tǒng)中的一個(gè)重要的優(yōu)點(diǎn)是可靠性。一臺(tái)服務(wù)器的系統(tǒng)崩潰并不影響到其余的服務(wù)器。

可擴(kuò)展性:

           在分布式計(jì)算系統(tǒng)可以根據(jù)需要增加更多的機(jī)器。

資源共享:

         共享數(shù)據(jù)是必不可少的應(yīng)用,如銀行,預(yù)訂系統(tǒng)。

靈活性:

         由于該系統(tǒng)是非常靈活的,它很容易安裝,實(shí)施和調(diào)試新的服務(wù)。

更快的速度:

       分布式計(jì)算系統(tǒng)可以有多臺(tái)計(jì)算機(jī)的計(jì)算能力,使得它比其他系統(tǒng)有更快的處理速度。

開(kāi)放系統(tǒng):

       由于它是開(kāi)放的系統(tǒng),本地或者遠(yuǎn)程都可以訪問(wèn)到該服務(wù)。

更高的性能:

       相較于集中式計(jì)算機(jī)網(wǎng)絡(luò)集群可以提供更高的性能(及更好的性價(jià)比)。


分布式計(jì)算的缺點(diǎn)

故障排除:

        故障排除和診斷問(wèn)題。

軟件:

       更少的軟件支持是分布式計(jì)算系統(tǒng)的主要缺點(diǎn)。

網(wǎng)絡(luò):

        網(wǎng)絡(luò)基礎(chǔ)設(shè)施的問(wèn)題,包括:傳輸問(wèn)題,高負(fù)載,信息丟失等。

安全性:

        開(kāi)放系統(tǒng)的特性讓分布式計(jì)算系統(tǒng)存在著數(shù)據(jù)的安全性和共享的風(fēng)險(xiǎn)等問(wèn)題。

CAP定理(CAP theorem)

       在計(jì)算機(jī)科學(xué)中, CAP定理(CAP theorem), 又被稱作布魯爾定理(Brewer's theorem), 它指出對(duì)于一個(gè)分布式計(jì)算系統(tǒng)來(lái)說(shuō),不可能同時(shí)滿足以下三點(diǎn):

  • 一致性(Consistency) 

  •          所有節(jié)點(diǎn)在同一時(shí)間具有相同的數(shù)據(jù)

  • 可用性(Availability) 

  •         保證每個(gè)請(qǐng)求不管成功或者失敗都有響應(yīng)

  • 分隔容忍(Partition tolerance)也被稱為分區(qū)容錯(cuò)性

  •          系統(tǒng)中任意信息的丟失或失敗不會(huì)影響系統(tǒng)的繼續(xù)運(yùn)作

CAP理論的核心是:一個(gè)分布式系統(tǒng)不可能同時(shí)很好的滿足一致性,可用性和分區(qū)容錯(cuò)性這三個(gè)需求,最多只能同時(shí)較好的滿足兩個(gè)。

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

  • CA - 單點(diǎn)集群,滿足一致性,可用性的系統(tǒng),通常在可擴(kuò)展性上不太強(qiáng)大。

  • CP - 滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高。

  • AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通??赡軐?duì)一致性要求低一些。

【NoSQL】01、NoSQL基礎(chǔ) 


BASE

BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定義。

CAP理論的核心是:一個(gè)分布式系統(tǒng)不可能同時(shí)很好的滿足一致性,可用性和分區(qū)容錯(cuò)性這三個(gè)需求,最多只能同時(shí)較好的滿足兩個(gè)。

BASENoSQL數(shù)據(jù)庫(kù)通常對(duì)可用性及一致性的弱要求原則:

  • Basically Availble   -- 基本可用

  • Soft-state        -- 軟狀態(tài)/柔性事務(wù)。 "Soft state" 可以理解為"無(wú)連接"的, 而 "Hard state" 是"面向連接"的

  • Eventual Consistency  -- 最終一致性(也稱弱一致性);也是是 ACID 的最終目的。


ACID vs BASE

ACIDBASE
原子性(Atomicity)基本可用(Basically Available)
一致性(Consistency)軟狀態(tài)/柔性事務(wù)(Soft state)
隔離性(Isolation)最終一致性 (Eventual consistency)
持久性 (Durable)

  ACID:強(qiáng)一致性、隔離性、采用悲觀保守的方法、難以變化

  BASE:弱一致性、可用性優(yōu)先、采用樂(lè)觀的方法,易于適應(yīng)變化,更簡(jiǎn)單、更快


最終一致性細(xì)分:

    因果一致性       

    讀自己寫(xiě)一致性

    會(huì)話一致性

    單調(diào)讀一致性、時(shí)間軸一致性(也被稱為單調(diào)寫(xiě)一致性)

  

數(shù)據(jù)一致性的實(shí)現(xiàn)技術(shù):

  NRW:

  2PC:二段式提交,是一種協(xié)議能保證強(qiáng)一致性

  Paxos,

  Vector Clock:向量時(shí)鐘


二、NoSQL概述

1、NoSQL簡(jiǎn)介

1998,NoREL

2009,NoSQL 正式提出

   NoSQL(NoSQL = Not Only SQL ),意即"不僅僅是SQL";NoSQL 是一種技術(shù)流派,而不是一種特定的技術(shù)

         在現(xiàn)代的計(jì)算系統(tǒng)上每天網(wǎng)絡(luò)上都會(huì)產(chǎn)生龐大的數(shù)據(jù)量,這些數(shù)據(jù)有很大一部分是由關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDMBSs)來(lái)處理。 1970年 E.F.Codd's提出的關(guān)系模型的論文 "A relational model of data for large shared data banks",這使得數(shù)據(jù)建模和應(yīng)用程序編程更加簡(jiǎn)單。通過(guò)應(yīng)用實(shí)踐證明,關(guān)系模型是非常適合于客戶服務(wù)器編程,遠(yuǎn)遠(yuǎn)超出預(yù)期的利益,今天它是結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)在網(wǎng)絡(luò)和商務(wù)應(yīng)用的主導(dǎo)技術(shù)。

       NoSQL 是一項(xiàng)全新的數(shù)據(jù)庫(kù)革命性運(yùn)動(dòng),早期就有人提出,發(fā)展至2009年趨勢(shì)越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫(kù)運(yùn)用,這一概念無(wú)疑是一種全新的思維的注入。


什么是NoSQL?

       NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫(kù)。NoSQL有時(shí)也稱作Not Only SQL的縮寫(xiě),是對(duì)不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)管理系統(tǒng)的統(tǒng)稱。

       NoSQL用于超大規(guī)模數(shù)據(jù)的存儲(chǔ)。(例如谷歌或Facebook每天為他們的用戶收集萬(wàn)億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲(chǔ)不需要固定的模式,無(wú)需多余操作就可以橫向擴(kuò)展。

為什么使用NoSQL ?

       今天我們可以通過(guò)第三方平臺(tái)(如:Google,Facebook等)可以很容易的訪問(wèn)和抓取數(shù)據(jù)。用戶的個(gè)人信息,社交網(wǎng)絡(luò),地理位置,用戶生成的數(shù)據(jù)和用戶操作日志已經(jīng)成倍的增加。我們?nèi)绻獙?duì)這些用戶數(shù)據(jù)進(jìn)行挖掘,那SQL數(shù)據(jù)庫(kù)已經(jīng)不適合這些應(yīng)用了, NoSQL數(shù)據(jù)庫(kù)的發(fā)展也卻能很好的處理這些大的數(shù)據(jù)。

【NoSQL】01、NoSQL基礎(chǔ)



2、大數(shù)據(jù)問(wèn)題 BigData,海量數(shù)據(jù)

 1)大數(shù)據(jù)四大管理系統(tǒng)(存儲(chǔ))

       并行數(shù)據(jù)庫(kù)系統(tǒng):傳統(tǒng)RDBMS水平切分,分區(qū)查詢

    NoSQL數(shù)據(jù)庫(kù)管理系統(tǒng):非關(guān)系模型、分布式、不支持ACID數(shù)據(jù)庫(kù)設(shè)計(jì)范式

    NewSQL數(shù)據(jù)庫(kù)管理系統(tǒng):力圖在分布式上實(shí)現(xiàn)ACID,或在ACID上實(shí)現(xiàn)分布式

          SQL為什么很難實(shí)現(xiàn)分布式?

             日志:分布式系統(tǒng)中,日志是一個(gè)障礙

             鎖:悲觀并發(fā)控制,大量的鎖,1個(gè)資源被1個(gè)進(jìn)程使用時(shí),另一個(gè)進(jìn)行需要使用這個(gè)資源時(shí)需要等待

             緩沖區(qū)管理:多個(gè)節(jié)點(diǎn)的緩沖區(qū)如何實(shí)現(xiàn)數(shù)據(jù)交互

          開(kāi)源解決方案:

             Clustix,GenieDB,ScaleArc,ScaleBase,NimbusDB,Drizzle

       云數(shù)據(jù)管理系統(tǒng):

 2)大數(shù)據(jù)的分析處理

    MapReduce:


3、NoSQL的技術(shù)特點(diǎn)

非關(guān)系型,分布式(符合CAP,BASE理論),不提供ACID

簡(jiǎn)單數(shù)據(jù)模型(如Key-Value)

元數(shù)據(jù)和應(yīng)用數(shù)據(jù)分離

   元數(shù)據(jù)用于數(shù)據(jù)管理,需要專門(mén)的元數(shù)據(jù)管理節(jié)點(diǎn)

弱一致性,通過(guò)技術(shù)方案支持最終一致性 

高吞吐能力

較高水平擴(kuò)展能力和低端硬件集群


4、NoSQL的優(yōu)勢(shì)

避免不必要的復(fù)雜性

不使用對(duì)象 - 關(guān)系映射


5、NoSQL的劣勢(shì)

數(shù)據(jù)模型和查詢語(yǔ)言沒(méi)有經(jīng)過(guò)數(shù)學(xué)驗(yàn)證

不支持ACID(事務(wù))

功能簡(jiǎn)單

沒(méi)有統(tǒng)一的數(shù)據(jù)查詢模型(關(guān)系型數(shù)據(jù)庫(kù)的SQL)


三、數(shù)據(jù)存儲(chǔ)模型

    NoSQL的各種流派就是根據(jù)數(shù)據(jù)存儲(chǔ)模型來(lái)劃分的

NoSQL 數(shù)據(jù)庫(kù)分類

類型部分代表


特點(diǎn)
列存儲(chǔ)

Hbase

Cassandra

Hypertable

顧名思義,是按列存儲(chǔ)數(shù)據(jù)的。最大的特點(diǎn)是方便存儲(chǔ)結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù),方便做數(shù)據(jù)壓縮,對(duì)針對(duì)某一列或者某幾列的查詢有非常大的IO優(yōu)勢(shì)。

文檔存儲(chǔ)

MongoDB

CouchDB

文檔存儲(chǔ)一般用類似json的格式存儲(chǔ),存儲(chǔ)的內(nèi)容是文檔型的。這樣也就有有機(jī)會(huì)對(duì)某些字段建立索引,實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)的某些功能。

key-value存儲(chǔ)

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通過(guò)key快速查詢到其value。一般來(lái)說(shuō),存儲(chǔ)不管value的格式,照單全收。(Redis包含了其他功能)

圖存儲(chǔ)

Neo4J

FlockDB

圖形關(guān)系的最佳存儲(chǔ)。使用傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)來(lái)解決的話性能低下,而且設(shè)計(jì)使用不方便。

對(duì)象存儲(chǔ)

db4o

Versant

通過(guò)類似面向?qū)ο笳Z(yǔ)言的語(yǔ)法操作數(shù)據(jù)庫(kù),通過(guò)對(duì)象的方式存取數(shù)據(jù)。

xml數(shù)據(jù)庫(kù)

Berkeley DB XML

BaseX

高效的存儲(chǔ)XML數(shù)據(jù),并支持XML的內(nèi)部查

列式模型:

     應(yīng)用場(chǎng)景:在分布式文件系統(tǒng)之上提供支持隨機(jī)讀寫(xiě)的分布式數(shù)據(jù)存儲(chǔ)

     典型產(chǎn)品:HBase、Hypertable、Cassandra

數(shù)據(jù)模型:以“列”為中心進(jìn)行存儲(chǔ),將同一列數(shù)據(jù)存儲(chǔ)在一起

     優(yōu)點(diǎn):快速查詢、高可擴(kuò)展性、易于實(shí)現(xiàn)分布式擴(kuò)展


文檔模型:

應(yīng)用場(chǎng)景:非強(qiáng)事務(wù)需求的web應(yīng)用

典型產(chǎn)品:MongoDB、ElasticSearch、CouchDB、CouchBase Server

數(shù)據(jù)模型:鍵值模型,將數(shù)據(jù)存儲(chǔ)為文檔

優(yōu)點(diǎn):數(shù)據(jù)模型無(wú)須事先定義


鍵值模型:

應(yīng)用場(chǎng)景:內(nèi)容緩存,用于大量并行數(shù)據(jù)訪問(wèn)高負(fù)載場(chǎng)景

典型產(chǎn)品:DynamoDB、Riak、Redis

數(shù)據(jù)模型:基于哈希表實(shí)現(xiàn)的key-value

優(yōu)點(diǎn):查詢迅速


圖式模型:

     應(yīng)用場(chǎng)景:社交網(wǎng)絡(luò)、推薦系統(tǒng)、關(guān)系圖譜

典型產(chǎn)品:Neo4j、Infinite Graph

數(shù)據(jù)模型:圖式結(jié)構(gòu)

優(yōu)點(diǎn):適應(yīng)于圖式計(jì)算場(chǎng)景



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

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

AI