您好,登錄后才能下訂單哦!
一、ACID、分布式、CAP、BASE 理論
事務在英文中是transaction,和現實世界中的交易很類似,它有如下四個特性:
1、A (Atomicity) 原子性
原子性很容易理解,也就是說事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。
比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
2、C (Consistency) 一致性
一致性也比較容易理解,也就是說數據庫要一直處于一致的狀態,事務的運行不會改變數據庫原本的一致性約束。
例如現有完整性約束a+b=10,如果一個事務改變了a,那么必須得改變b,使得事務結束后依然滿足a+b=10,否則事務失敗。
3、I (Isolation) 獨立性或隔離性
所謂的獨立性是指并發的事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數據就不受未提交事務的影響。
比如現有有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。
4、D (Durability) 持久性
持久性是指一旦事務提交后,它所做的修改將會永久的保存在數據庫上,即使出現宕機也不會丟失。
分布式系統(distributed system)由多臺計算機和通信的軟件組件通過計算機網絡連接(本地網絡或廣域網)組成。
分布式系統是建立在網絡之上的軟件系統。正是因為軟件的特性,所以分布式系統具有高度的內聚性和透明性。
因此,網絡和分布式系統之間的區別更多的在于高層軟件(特別是操作系統),而不是硬件。
分布式系統可以應用在在不同的平臺上如:Pc、工作站、局域網和廣域網上等。
可靠性(容錯) :
分布式計算系統中的一個重要的優點是可靠性。一臺服務器的系統崩潰并不影響到其余的服務器。
可擴展性:
在分布式計算系統可以根據需要增加更多的機器。
資源共享:
共享數據是必不可少的應用,如銀行,預訂系統。
靈活性:
由于該系統是非常靈活的,它很容易安裝,實施和調試新的服務。
更快的速度:
分布式計算系統可以有多臺計算機的計算能力,使得它比其他系統有更快的處理速度。
開放系統:
由于它是開放的系統,本地或者遠程都可以訪問到該服務。
更高的性能:
相較于集中式計算機網絡集群可以提供更高的性能(及更好的性價比)。
故障排除:
故障排除和診斷問題。
軟件:
更少的軟件支持是分布式計算系統的主要缺點。
網絡:
網絡基礎設施的問題,包括:傳輸問題,高負載,信息丟失等。
安全性:
開放系統的特性讓分布式計算系統存在著數據的安全性和共享的風險等問題。
在計算機科學中, CAP定理(CAP theorem), 又被稱作布魯爾定理(Brewer's theorem), 它指出對于一個分布式計算系統來說,不可能同時滿足以下三點:
一致性(Consistency)
所有節點在同一時間具有相同的數據
可用性(Availability)
保證每個請求不管成功或者失敗都有響應
分隔容忍(Partition tolerance)也被稱為分區容錯性
系統中任意信息的丟失或失敗不會影響系統的繼續運作
CAP理論的核心是:一個分布式系統不可能同時很好的滿足一致性,可用性和分區容錯性這三個需求,最多只能同時較好的滿足兩個。
因此,根據 CAP 原理將 NoSQL 數據庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:
CA - 單點集群,滿足一致性,可用性的系統,通常在可擴展性上不太強大。
CP - 滿足一致性,分區容忍性的系統,通常性能不是特別高。
AP - 滿足可用性,分區容忍性的系統,通常可能對一致性要求低一些。
BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定義。
CAP理論的核心是:一個分布式系統不可能同時很好的滿足一致性,可用性和分區容錯性這三個需求,最多只能同時較好的滿足兩個。
BASE是NoSQL數據庫通常對可用性及一致性的弱要求原則:
Basically Availble -- 基本可用
Soft-state -- 軟狀態/柔性事務。 "Soft state" 可以理解為"無連接"的, 而 "Hard state" 是"面向連接"的
Eventual Consistency -- 最終一致性(也稱弱一致性);也是是 ACID 的最終目的。
ACID | BASE |
---|---|
原子性(Atomicity) | 基本可用(Basically Available) |
一致性(Consistency) | 軟狀態/柔性事務(Soft state) |
隔離性(Isolation) | 最終一致性 (Eventual consistency) |
持久性 (Durable) |
ACID:強一致性、隔離性、采用悲觀保守的方法、難以變化
BASE:弱一致性、可用性優先、采用樂觀的方法,易于適應變化,更簡單、更快
最終一致性細分:
因果一致性
讀自己寫一致性
會話一致性
單調讀一致性、時間軸一致性(也被稱為單調寫一致性)
數據一致性的實現技術:
NRW:
2PC:二段式提交,是一種協議能保證強一致性
Paxos,
Vector Clock:向量時鐘
二、NoSQL概述
1、NoSQL簡介
1998,NoREL
2009,NoSQL 正式提出
NoSQL(NoSQL = Not Only SQL ),意即"不僅僅是SQL";NoSQL 是一種技術流派,而不是一種特定的技術
在現代的計算系統上每天網絡上都會產生龐大的數據量,這些數據有很大一部分是由關系數據庫管理系統(RDMBSs)來處理。 1970年 E.F.Codd's提出的關系模型的論文 "A relational model of data for large shared data banks",這使得數據建模和應用程序編程更加簡單。通過應用實踐證明,關系模型是非常適合于客戶服務器編程,遠遠超出預期的利益,今天它是結構化數據存儲在網絡和商務應用的主導技術。
NoSQL 是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢越發高漲。NoSQL的擁護者們提倡運用非關系型的數據存儲,相對于鋪天蓋地的關系型數據庫運用,這一概念無疑是一種全新的思維的注入。
NoSQL,指的是非關系型的數據庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同于傳統的關系型數據庫的數據庫管理系統的統稱。
NoSQL用于超大規模數據的存儲。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多余操作就可以橫向擴展。
今天我們可以通過第三方平臺(如:Google,Facebook等)可以很容易的訪問和抓取數據。用戶的個人信息,社交網絡,地理位置,用戶生成的數據和用戶操作日志已經成倍的增加。我們如果要對這些用戶數據進行挖掘,那SQL數據庫已經不適合這些應用了, NoSQL數據庫的發展也卻能很好的處理這些大的數據。
2、大數據問題 BigData,海量數據
1)大數據四大管理系統(存儲)
并行數據庫系統:傳統RDBMS水平切分,分區查詢
NoSQL數據庫管理系統:非關系模型、分布式、不支持ACID數據庫設計范式
NewSQL數據庫管理系統:力圖在分布式上實現ACID,或在ACID上實現分布式
SQL為什么很難實現分布式?
日志:分布式系統中,日志是一個障礙
鎖:悲觀并發控制,大量的鎖,1個資源被1個進程使用時,另一個進行需要使用這個資源時需要等待
緩沖區管理:多個節點的緩沖區如何實現數據交互
開源解決方案:
Clustix,GenieDB,ScaleArc,ScaleBase,NimbusDB,Drizzle
云數據管理系統:
2)大數據的分析處理
MapReduce:
3、NoSQL的技術特點
非關系型,分布式(符合CAP,BASE理論),不提供ACID
簡單數據模型(如Key-Value)
元數據和應用數據分離
元數據用于數據管理,需要專門的元數據管理節點
弱一致性,通過技術方案支持最終一致性
高吞吐能力
較高水平擴展能力和低端硬件集群
4、NoSQL的優勢
避免不必要的復雜性
不使用對象 - 關系映射
5、NoSQL的劣勢
數據模型和查詢語言沒有經過數學驗證
不支持ACID(事務)
功能簡單
沒有統一的數據查詢模型(關系型數據庫的SQL)
三、數據存儲模型
NoSQL的各種流派就是根據數據存儲模型來劃分的
類型 | 部分代表 | 特點 |
列存儲 | Hbase Cassandra Hypertable | 顧名思義,是按列存儲數據的。最大的特點是方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或者某幾列的查詢有非常大的IO優勢。 |
文檔存儲 | CouchDB | 文檔存儲一般用類似json的格式存儲,存儲的內容是文檔型的。這樣也就有有機會對某些字段建立索引,實現關系數據庫的某些功能。 |
key-value存儲 | Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB | 可以通過key快速查詢到其value。一般來說,存儲不管value的格式,照單全收。(Redis包含了其他功能) |
圖存儲 | Neo4J FlockDB | 圖形關系的最佳存儲。使用傳統關系數據庫來解決的話性能低下,而且設計使用不方便。 |
對象存儲 | db4o Versant | 通過類似面向對象語言的語法操作數據庫,通過對象的方式存取數據。 |
xml數據庫 | Berkeley DB XML BaseX | 高效的存儲XML數據,并支持XML的內部查 |
列式模型:
應用場景:在分布式文件系統之上提供支持隨機讀寫的分布式數據存儲
典型產品:HBase、Hypertable、Cassandra
數據模型:以“列”為中心進行存儲,將同一列數據存儲在一起
優點:快速查詢、高可擴展性、易于實現分布式擴展
文檔模型:
應用場景:非強事務需求的web應用
典型產品:MongoDB、ElasticSearch、CouchDB、CouchBase Server
數據模型:鍵值模型,將數據存儲為文檔
優點:數據模型無須事先定義
鍵值模型:
應用場景:內容緩存,用于大量并行數據訪問高負載場景
典型產品:DynamoDB、Riak、Redis
數據模型:基于哈希表實現的key-value
優點:查詢迅速
圖式模型:
應用場景:社交網絡、推薦系統、關系圖譜
典型產品:Neo4j、Infinite Graph
數據模型:圖式結構
優點:適應于圖式計算場景
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。