像MongoDB, Cassandra, HBase, DynamoDB, 和
目前創(chuàng)新互聯(lián)建站已為成百上千的企業(yè)提供了網(wǎng)站建設、域名、虛擬主機、網(wǎng)站運營、企業(yè)網(wǎng)站設計、華鎣網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
Riak這些NoSQL缺乏傳統(tǒng)的原子事務機制,所謂原子事務機制是可以保證一系列寫操作要么全部完成,要么全部不會完成,不會發(fā)生只完成一系列中一兩個
寫操作;因為數(shù)據(jù)庫不提供這種事務機制支持,開發(fā)者需要自己編寫代碼來確保一系列寫操作的事務機制,比較復雜和測試。
這些NoSQL數(shù)據(jù)庫不提供事務機制原因在于其分布式特點,一系列寫操作中訪問的數(shù)據(jù)可能位于不同的分區(qū)服務器,這樣的事務就變成分布式事務,在分
布式事務中實現(xiàn)原子性需要彼此協(xié)調,而協(xié)調是耗費時間的,每臺機器在一個大事務過程中必須依次確認,這就需要一種協(xié)議確保一個事務中沒有任何一臺機器寫操
作失敗。
這種協(xié)調是昂貴的,會增加延遲時間,關鍵問題是,當協(xié)調沒有完成時,其他操作是不能讀取事務中寫操作結果的,這是因為事務的all-or-
nothing原理導致,萬一協(xié)調過程發(fā)現(xiàn)某個寫操作不能完成,那么需要將其他寫操作成功的進行回滾。針對分布式事務的分布式協(xié)調對整體數(shù)據(jù)庫性能有嚴重
影響,不只是吞吐量還包括延遲時間,這樣大部分NoSQL數(shù)據(jù)庫因為性能問題就選擇不提供分布式事務。
MongoDB, Riak, HBase, 和 Cassandra提供基于單一鍵的事務,這是因為所有信息都和一個鍵key有關,這個鍵是存儲在單個服務器上,這樣基于單鍵的事務不會帶來復雜的分布式協(xié)調。
那么看來擴展性性能和分布式事務是一對矛盾,總要有取舍?實際上是不完全是,現(xiàn)在完全有可能提供高擴展的性能同時提供分布式原子事務。
FIT是這樣一個在分布式系統(tǒng)提供原子事務的策略,在fairness公平性, isolation隔離性, 和throughput吞吐量(簡稱FIT)可以權衡。
一個支持分布式事務的可伸縮分布式系統(tǒng)能夠完成這三個屬性中兩個,公平是事務之間不會相互影響造成延遲;隔離性提供一種幻覺好像整個數(shù)據(jù)庫只有它自
己一個事務,隔離性保證當任何同時發(fā)生的事務發(fā)生沖突時,能夠保證彼此能看到彼此的寫操作結果,因此減輕了程序員為避免事務讀寫沖突的強邏輯推理要求;吞
吐量是指每單元時間數(shù)據(jù)庫能夠并發(fā)處理多少事務。
FIT是如下進行權衡:
保證公平性fairness 和隔離性isolation, 但是犧牲吞吐量
保證公平性fairness和吞吐量, 犧牲隔離性isolation
保證隔離性isolation和吞吐量throughput, 但是犧牲公平性fairness.
犧牲公平性:放棄公平性,數(shù)據(jù)庫能有更多機會降低分布式事務的成本,主要成本是分布式協(xié)調帶來的,也就是說,不需要在每個事務過程內對每個機器都依
次確認事務完成,這樣排隊式的確認commit事務是很浪費時間的,放棄公平性,意味著可以在事務外面進行協(xié)調,這樣就只是增加了協(xié)調時間,不會增加互相
沖突事務因為彼此沖突而不能運行所耽擱的時間,當系統(tǒng)不需要公平性時,需要根據(jù)事務的優(yōu)先級或延遲等標準進行指定先后執(zhí)行順序,這樣就能夠獲得很好的吞吐
量。
G-Store是一種放棄公平性的 Isolation-Throughput
的分布式key-value存儲,支持多鍵事務(multi-key transactions),MongoDB 和
HBase在鍵key在同樣分區(qū)上也支持多鍵事務,但是不支持跨分區(qū)的事務。
總之:傳統(tǒng)分布式事務性能不佳的原因是確保原子性(分布式協(xié)調)和隔離性同時重疊,創(chuàng)建一個高吞吐量分布式事務的關鍵是分離這兩種關注,這種分離原
子性和隔離性的視角將導致兩種類型的系統(tǒng),第一種選擇是弱隔離性能讓沖突事務并行執(zhí)行和確認提交;第二個選擇重新排序原子性和隔離性機制保證它們不會某個
時間重疊,這是一種放棄公平的事務執(zhí)行,所謂放棄公平就是不再同時照顧原子性和隔離性了,有所傾斜,放棄高標準道德要求就會帶來高自由高效率。
2. 什么是NoSQL?
2.1 NoSQL 概述
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,
泛指非關系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關系數(shù)據(jù)庫在應付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展。NoSQL數(shù)據(jù)庫的產生就是為了解決大規(guī)模數(shù)據(jù)集合多重數(shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應用難題,包括超大規(guī)模數(shù)據(jù)的存儲。
(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲不需要固定的模式,無需多余操作就可以橫向擴展。
2.2 NoSQL代表
MongDB、 Redis、Memcache
3. 關系型數(shù)據(jù)庫與NoSQL的區(qū)別?
3.1 RDBMS
高度組織化結構化數(shù)據(jù)
結構化查詢語言(SQL)
數(shù)據(jù)和關系都存儲在單獨的表中。
數(shù)據(jù)操縱語言,數(shù)據(jù)定義語言
嚴格的一致性
基礎事務
ACID
關系型數(shù)據(jù)庫遵循ACID規(guī)則
事務在英文中是transaction,和現(xiàn)實世界中的交易很類似,它有如下四個特性:
A (Atomicity) 原子性
原子性很容易理解,也就是說事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
C (Consistency) 一致性
一致性也比較容易理解,也就是說數(shù)據(jù)庫要一直處于一致的狀態(tài),事務的運行不會改變數(shù)據(jù)庫原本的一致性約束。
I (Isolation) 獨立性
所謂的獨立性是指并發(fā)的事務之間不會互相影響,如果一個事務要訪問的數(shù)據(jù)正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數(shù)據(jù)就不受未提交事務的影響。比如現(xiàn)有有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的
D (Durability) 持久性
持久性是指一旦事務提交后,它所做的修改將會永久的保存在數(shù)據(jù)庫上,即使出現(xiàn)宕機也不會丟失。
3.2 NoSQL
代表著不僅僅是SQL
沒有聲明性查詢語言
沒有預定義的模式
鍵 - 值對存儲,列存儲,文檔存儲,圖形數(shù)據(jù)庫
最終一致性,而非ACID屬性
非結構化和不可預知的數(shù)據(jù)
CAP定理
高性能,高可用性和可伸縮性
分布式數(shù)據(jù)庫中的CAP原理(了解)
CAP定理:
Consistency(一致性), 數(shù)據(jù)一致更新,所有數(shù)據(jù)變動都是同步的
Availability(可用性), 好的響應性能
Partition tolerance(分區(qū)容錯性) 可靠性
P: 系統(tǒng)中任意信息的丟失或失敗不會影響系統(tǒng)的繼續(xù)運作。
定理:任何分布式系統(tǒng)只可同時滿足二點,沒法三者兼顧。
CAP理論的核心是:一個分布式系統(tǒng)不可能同時很好的滿足一致性,可用性和分區(qū)容錯性這三個需求,
因此,根據(jù) CAP 原理將 NoSQL 數(shù)據(jù)庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:
CA - 單點集群,滿足一致性,可用性的系統(tǒng),通常在可擴展性上不太強大。
CP - 滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高。
AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通??赡軐σ恢滦砸蟮鸵恍?/p>
CAP理論就是說在分布式存儲系統(tǒng)中,最多只能實現(xiàn)上面的兩點。
而由于當前的網(wǎng)絡硬件肯定會出現(xiàn)延遲丟包等問題,所以分區(qū)容忍性是我們必須需要實現(xiàn)的。
所以我們只能在一致性和可用性之間進行權衡,沒有NoSQL系統(tǒng)能同時保證這三點。
說明:C:強一致性 A:高可用性 P:分布式容忍性
舉例:
CA:傳統(tǒng)Oracle數(shù)據(jù)庫
AP:大多數(shù)網(wǎng)站架構的選擇
CP:Redis、Mongodb
注意:分布式架構的時候必須做出取舍。
一致性和可用性之間取一個平衡。多余大多數(shù)web應用,其實并不需要強一致性。
因此犧牲C換取P,這是目前分布式數(shù)據(jù)庫產品的方向。
4. 當下NoSQL的經典應用
當下的應用是 SQL 與 NoSQL 一起使用的。
代表項目:阿里巴巴商品信息的存放。
去 IOE 化。
ps:I 是指 IBM 的小型機,很貴的,好像好幾萬一臺;O 是指 Oracle 數(shù)據(jù)庫,也很貴的,好幾萬呢;M 是指 EMC 的存儲設備,也很貴的。
難點:
數(shù)據(jù)類型多樣性。
數(shù)據(jù)源多樣性和變化重構。
數(shù)據(jù)源改造而服務平臺不需要大面積重構。
互聯(lián)網(wǎng)公司常用的基本集中在以下幾種,每種只舉一個比較常見或者應用比較成功的例子吧。
1. In-Memory KV Store : Redis
in memory key-value store,同時提供了更加豐富的數(shù)據(jù)結構和運算的能力,成功用法是替代memcached,通過checkpoint和commit log提供了快速的宕機恢復,同時支持replication提供讀可擴展和高可用。
2. Disk-Based KV Store: Leveldb
真正基于磁盤的key-value storage, 模型單一簡單,數(shù)據(jù)量不受限于內存大小,數(shù)據(jù)落盤高可靠,Google的幾位大神出品的精品,LSM模型天然寫優(yōu)化,順序寫盤的方式對于新硬件ssd再適合不過了,不足是僅提供了一個庫,需要自己封裝server端。
3. Document Store: Mongodb
分布式nosql,具備了區(qū)別mysql的最大亮點:可擴展性。mongodb 最新引人的莫過于提供了sql接口,是目前nosql里最像mysql的,只是沒有ACID的特性,發(fā)展很快,支持了索引等特性,上手容易,對于數(shù)據(jù)量遠超內存限制的場景來說,還需要慎重。
4. Column Table Store: HBase
這個富二代似乎不用贅述了,最大的優(yōu)勢是開源,對于普通的scan和基于行的get等基本查詢,性能完全不是問題,只是只提供裸的api,易用性上是短板,可擴展性方面是最強的,其次坐上了Hadoop的快車,社區(qū)發(fā)展很快,各種基于其上的開源產品不少,來解決諸如join、聚集運算等復雜查詢。
一:傳統(tǒng)數(shù)據(jù)庫
(1)傳統(tǒng)索引不適于海量數(shù)據(jù)? ??
傳統(tǒng)行存數(shù)據(jù)庫索引需要手工設定,對應用不完全透明,隨場景和需求的變化需要不斷調整,人工維護成本很高。并且傳統(tǒng)索引占用存儲空間很大,甚至高于數(shù)據(jù)本身,造成查詢效率的下降。
(2)數(shù)據(jù)裝載速度慢
因為索引需要重新創(chuàng)建,加載性能會變的很糟糕。分析型架構系統(tǒng)要解決這些個問題,必須最大限度地減少磁盤 I/O ,提升查詢效率,減小人工維護成本。南大通用分析型數(shù)據(jù)庫GBase8a (以下簡稱GBase 8a)通過列存儲模式、數(shù)據(jù)壓縮、智能化的索引、并行處理、并發(fā)控制、高效的查詢優(yōu)化器等技術,使得上述問題得到有效解決。以下各節(jié)將描述 GBase 8a 的創(chuàng)新架構如何實現(xiàn)這些目標。
二:新型數(shù)據(jù)庫
新型數(shù)據(jù)庫采用分布式并行計算架構,部署于X86通用服務器,滿足大數(shù)據(jù)實時交易需求,成本低、擴展性高,突破了傳統(tǒng)數(shù)據(jù)庫性能瓶頸。
分布式非關系型數(shù)據(jù)庫技術創(chuàng)新
非關系型數(shù)據(jù)庫即NoSQL,拋棄了關系數(shù)據(jù)庫復雜的關系操作、事務處理等功能,僅提供簡單的鍵值對(Key, Value)數(shù)據(jù)的存儲與查詢,換取高擴展性和高性能,滿足論壇、博客、SNS、微博等互聯(lián)網(wǎng)類應用場景下針對海量數(shù)據(jù)的簡單操作需求。主要技術創(chuàng)新為:
(1) 簡單的數(shù)據(jù)操作換取高效響應。NoSQL僅支持按照Key(關鍵字)來存儲和查詢Value(數(shù)據(jù)),不支持對非關鍵字數(shù)據(jù)列的高效查詢;因數(shù)據(jù)操作簡單、數(shù)據(jù)間一般不需要關聯(lián)操作,故系統(tǒng)可支持高并發(fā)和較快的響應速度。
(2) 多種一致性策略滿足業(yè)務需求。不同于傳統(tǒng)關系型數(shù)據(jù)庫僅支持強一致性策略,NoSQL還支持弱一致性和最終一致性等多種策略,可根據(jù)應用場景進行對應配置。例如,對寫入操作頻繁,但數(shù)據(jù)讀取最新版本要求并不嚴格的應用,如互聯(lián)網(wǎng)網(wǎng)頁數(shù)據(jù)的存儲和分析應用,可以采用最終一致性策略;而對訂購關系存儲的應用,則必須用強一致性策略,保證總是讀取最新版本數(shù)據(jù)
作者 石默研
關于CAP的討論已經很多,包括作者的另一篇文章“對CAP的初步解釋”,基本已經即定思維的理解就是:分布式系統(tǒng)必須遵循CAP,一個分布式系統(tǒng)的設計只能同時滿足其中兩個,不可能同時滿足;傳統(tǒng)關系數(shù)據(jù)庫選擇A與C,代表了互聯(lián)網(wǎng)新興技術的NoSQL數(shù)據(jù)庫則選擇A與P(或者C與P,雖然這種情況其實需要詳細討論)。
但是,近年來,新興的NewSQL數(shù)據(jù)庫(TiDB或者OceanBase),則是一種在分布式環(huán)境下,保證的ACID強事務特征的強一致性數(shù)據(jù)庫,并且很顯然,它同時也滿足了高可用性與優(yōu)秀的分區(qū)可容忍性(很好的可擴展特性便是其一個層面的證明),似乎看起來,C、A、P都同時保證了,這不是違反了已經經過嚴格證明的CAP理論嗎?
這個問題初看起來,似乎是比較神奇,但仔細分析,其實答案是很明顯的。
首先,需要讀者區(qū)分“分布式”與CAP中所提到的分區(qū)可容忍性Paritition Tolerance并不是一回事。分區(qū)可容忍性P是指以下兩種分布式的情況:
. 同一份數(shù)據(jù)的多個副本的可分布性
. 有相互關聯(lián)的數(shù)據(jù)的可分布性(操作中表現(xiàn)為保證ACID的強分布式事務)
即使是分庫分表,如果不存在以上兩種情況,只是獨立數(shù)據(jù)在同一個節(jié)點上的情況,雖然也是分布式,但跟CAP中的P沒有半毛錢關系。
那么,還是回到上面的問題,NewSQL數(shù)據(jù)庫,確實也是在保證了同一份數(shù)據(jù)多副本的強讀寫一致性、以及強分布式事務特性這樣的C的情況下,同時保證了A與P呀!事實確實如此,但這還是要仔細分析:
無論是TiDB,還是OceanBase,其在保證數(shù)據(jù)多副本的強一致性時,都采用了Paxos協(xié)議或者Raft,它們簡單來講就是多數(shù)選舉的原則,即寫不需要全部副本都完成,就能保證讀的強一致性,反過來也是一樣。因此,其在分布式情況下,保證數(shù)據(jù)讀寫強一致性的效率還是很高的,就是說,在同一個數(shù)據(jù)中心的網(wǎng)絡環(huán)境下,雖然這種分布可容忍性的滿足理論上講也會比單節(jié)點多一點點效率損失,但實際上是可以忽略不計的。但需要指出的是,在跨數(shù)據(jù)中心、跨城市的分布式情況下,如果要保證數(shù)據(jù)多副本的強一致性,即保證分區(qū)可容忍性,對效率(實際上是可用性A)的影響那還是不可忽略的。因此,在這種情況下,CAP理論依然成立。
再來看相互關聯(lián)數(shù)據(jù)的可分布性,這就涉及到了分布式事務?,F(xiàn)有的NewSQL數(shù)據(jù)庫,即使在同一數(shù)據(jù)中心,為了保證強的分布式事務,對效率的折衷都是不可忽略的,所謂的樂觀事務,只是因為客觀問題本身沖突就少,并不改變沖突很多時效率明顯受影響的現(xiàn)實。因此,NewSQL數(shù)據(jù)庫雖然提供強分布式事務的能力,但在現(xiàn)實應用中,都是提倡盡量避免大量的分布式事務出現(xiàn)。如果你所遇到的應用場景是確實需要大量的分布式事務執(zhí)行,又不做應用優(yōu)化全交給數(shù)據(jù)庫執(zhí)行,那么,現(xiàn)有的NewSQL分布式數(shù)據(jù)庫,依然會遇到明顯的性能問題,其實就是可用性A降低了。同學仔細去研究應用中的實際情況就會發(fā)現(xiàn),很多互聯(lián)網(wǎng)應用,當其所需要的QPS很高很高,而對讀寫一致性與強分布式事務的要求又不那很高時候,其實,NewSQL數(shù)據(jù)庫還是不能滿足他們的需求的,他們仍然需要根據(jù)自己的情況改造或者選用NoSQL數(shù)據(jù)庫,這也是CAP理論并沒有被NewSQL打破的現(xiàn)實證明。
因此,總結來講,NewSQL數(shù)據(jù)庫,也是遵循CAP理論的,只不過,在同中心數(shù)據(jù)多副本情況下,保證P的同時對A的影響微乎其微;而在分布式事務的情況下,又采用了與應用特性相關的策略(其實樂觀、悲觀事務本質上就有根本應用特性區(qū)分的意思)來保證性能而已。當然,隨著網(wǎng)絡與計算機性能的提高,CAP三個特征中,保證其中兩個,折衷另外一個,所帶來的影響也會逐漸變小,但其理論依然是正確的。
文章名稱:分布式強一致Nosql,與分布式對立
鏈接地址:http://jinyejixie.com/article18/dsededp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、App開發(fā)、網(wǎng)站策劃、定制網(wǎng)站、網(wǎng)站建設、電子商務
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)