自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

RDBMS vs. NoSQL:反派為什么會得以存活并發(fā)展壯大

云計(jì)算
盡管數(shù)百NoSQL林立,盡管在不同的場景下NoSQL有著傳統(tǒng)數(shù)據(jù)庫無可匹敵的性能,然而在人氣上,NoSQL也只能望其項(xiàng)背。所謂存在既有道理,這里一覽如此強(qiáng)勢RDBMS籠罩下,這個反派存在的原因。

在學(xué)習(xí)不同NoSQL系統(tǒng)的特性之前,了解一下NoSQL的發(fā)展史總不會錯的;用一句話來說,NoSQL是天生的反派!

天生的反派NoSQL

這里我們不妨把NoSQL比作No SQL,它必須站在RDBMS的對立面,這里不妨通過邏輯流來解釋一下這個觀點(diǎn):

 

 

RDBMS通過匹配關(guān)系數(shù)據(jù)(關(guān)系和表格)的數(shù)據(jù)操作方法定義SQL語言,并且支持ACID特性的事務(wù)。

橫向擴(kuò)展在數(shù)據(jù)處理前就會進(jìn)行分配,用以滿足網(wǎng)絡(luò)服務(wù)的高吞吐量需求。當(dāng)下RDBMS橫向擴(kuò)展的更趨向于維護(hù)關(guān)系模型的作業(yè)完整性,這和事務(wù)操作構(gòu)成了RDBMS的核心。

然而在維護(hù)完整性的同時進(jìn)行擴(kuò)展是非常難得的,而在分配和復(fù)制數(shù)據(jù)時會出現(xiàn)類似的問題。所以在進(jìn)行橫向擴(kuò)展之前,必須保證通過DBMS實(shí)現(xiàn)的基于ACID事務(wù)特性不那么嚴(yán)格,當(dāng)然還有復(fù)制完整性也不能那么嚴(yán)格。

RDBMS的橫向擴(kuò)展

對RDBMS進(jìn)行擴(kuò)展是很難的。如果只是擴(kuò)展到幾千規(guī)模是很輕松的,類似Oracle 這樣領(lǐng)先的數(shù)據(jù)庫開發(fā)機(jī)構(gòu)在很早之前就發(fā)布了一兩個這樣的產(chǎn)品。

這里不妨假設(shè)將RDBMS中的表格分配到幾臺主機(jī)上,而為了高可用性每份數(shù)據(jù)都會在存儲前都會被復(fù)制。首先,在保證ACID進(jìn)行擴(kuò)展時執(zhí)行分配操作就非常困難。

想實(shí)現(xiàn)ACID中的原子性,執(zhí)行某個事務(wù)時,類似2PC這樣的分布事務(wù)協(xié)議必須在所有系統(tǒng)中使用。

為了滿足ACID特性中的隔離級別,數(shù)據(jù)通常都會被加鎖。鎖的級別可以是一條記錄,一個表格或者是一個索引。

因此,為了在分布式環(huán)境中滿足原子性和隔離需求,因此在分布式事務(wù)協(xié)議的處理期間,每個系統(tǒng)都會加上所有相關(guān)的鎖;系統(tǒng)的負(fù)載越大,鎖的競爭越繁重。這就是很難擴(kuò)展的原因。

另一個橫向擴(kuò)展中必須面臨的問題就是數(shù)據(jù)的復(fù)制和分配。

事務(wù)性復(fù)制使用了2PC方法,這里存在的問題就是:當(dāng)與某個復(fù)制事務(wù)相關(guān)的任何系統(tǒng)出故障時,這個事務(wù)就會失敗并變得不可用。此外,當(dāng)復(fù)制事務(wù)同時涉及幾個系統(tǒng)時,性能就會降低。

作為替代,將一個DBMS的WAL(Write Ahead Logging,預(yù)寫式日志)數(shù)據(jù)傳送給備份系統(tǒng)并讓它使用。節(jié)點(diǎn)可以配置為master-slave或multi-master方式。

當(dāng)使用master-slave類型時:這也是最常見的復(fù)制方法。復(fù)制過程的速度與系統(tǒng)中的從節(jié)點(diǎn)數(shù)量成反比。

當(dāng)使用multi-master配置時:當(dāng)同時存在幾個主節(jié)點(diǎn)時,處理數(shù)據(jù)寫入進(jìn)程間的沖突是非常困難的,并且很難阻止這個情況發(fā)生。在《The Danagers of Replication and a Solution》一書中(曾獲1998年圖靈獎),Jim Gray對這個問題進(jìn)入了深入研究。

通過開發(fā)者分片

通常來說,在滿足ACID特性的數(shù)據(jù)庫中進(jìn)行擴(kuò)展是非常難的。基于這個原因,對數(shù)據(jù)進(jìn)行擴(kuò)展,這個數(shù)據(jù)庫本身就必須擁有簡單的模型,將數(shù)據(jù)分割為N片,然后在單獨(dú)的片中執(zhí)行查詢。

數(shù)據(jù)分割的單元被稱為“shard”。將N片數(shù)據(jù)分配個M個DBMS進(jìn)行操作。DBMS并不會去管理數(shù)據(jù)片,這需由服務(wù)開發(fā)者自行完成。

分片的方法由開發(fā)者決定,這里同樣會有幾個問題:

首先,分片必須被定義。

其次,分片映射:

RDBMS的基本儲存單元是表格。鑒于一個表格可能會包含一個或多個分片,這里需要明白分片需要被映射到的數(shù)據(jù)庫實(shí)例。應(yīng)用程序也必須知道分片表格對應(yīng)的位置。

***,分片的分配和重分配:

鑒于吞吐量需求和數(shù)據(jù)體積,每個分片都不同。所以開發(fā)者必須從數(shù)據(jù)庫中增加或者刪除一個實(shí)例,并且手動重分配分片。這個過程非常繁瑣。同時在這個過程中,修改的映射信息必須告知應(yīng)用程序。數(shù)據(jù)修改后,還必須做相應(yīng)的管理(比如,針對復(fù)制的配置)。

責(zé)任編輯:王程程 來源: Dzone
相關(guān)推薦

2015-06-16 13:12:49

綜合布線布線技術(shù)

2016-07-14 10:41:33

SDN網(wǎng)絡(luò)基礎(chǔ)設(shè)施

2021-01-13 16:04:07

網(wǎng)絡(luò)On-Prem托管

2018-06-06 08:50:49

LinuxUnixWindows

2015-04-16 15:42:21

關(guān)系型數(shù)據(jù)庫NoSQL

2014-09-28 10:29:43

喬布斯施密特Android

2021-12-23 15:36:21

NASSANDAS

2020-08-25 09:14:17

對象存儲文件存儲塊存儲

2023-05-22 19:49:30

命令Linux

2024-09-12 22:45:47

2025-02-18 16:00:00

代碼Python架構(gòu)

2019-08-27 11:18:37

云計(jì)算云存儲云備份

2019-04-02 15:07:51

API NginxZuul

2013-04-27 09:16:35

數(shù)據(jù)庫安全NoSQL安全NoSQL

2020-09-21 06:53:41

NoSQL高并發(fā)面試

2021-03-10 17:22:18

數(shù)據(jù)虛擬化

2020-04-15 10:21:43

云計(jì)算AWSAzure

2019-01-18 12:50:57

NoSQL數(shù)據(jù)庫Oracle

2022-08-04 14:54:50

APTDNFYUM
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號