關(guān)系數(shù)據(jù)庫(kù)主要是以SQL為搜索引擎,也稱(chēng)做SQL關(guān)系數(shù)據(jù)庫(kù);與之相對(duì)的是NoSQL非關(guān)系數(shù)據(jù)庫(kù),它以鍵值數(shù)據(jù)庫(kù)(Key-Value Store DB)為代表,Single DB就屬于鍵值數(shù)據(jù)庫(kù)。隨著網(wǎng)絡(luò)的不斷發(fā)展,特別是超大規(guī)模和髙并發(fā)的社交網(wǎng)絡(luò)的出現(xiàn),傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)顯得有些力不從心,暴露了很多難以克服的問(wèn)題,這時(shí)非關(guān)系數(shù)據(jù)庫(kù)應(yīng)運(yùn)而生。但是非關(guān)系數(shù)據(jù)庫(kù)在處理ACID類(lèi)問(wèn)題時(shí)存在著一些先天性的不足,于是人們又開(kāi)始嘗試對(duì)傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)進(jìn)行修改,提髙它的可擴(kuò)展性。這節(jié)將要介紹的Amazon RDS (Relational Database Service)就是這樣一種技術(shù)。
SQL和NoSQL數(shù)據(jù)庫(kù)的對(duì)比
下面對(duì)SQL和NoSQL數(shù)據(jù)庫(kù)進(jìn)行如下幾個(gè)方面的對(duì)比。
(1)數(shù)據(jù)模型:SQL數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)有嚴(yán)格的約束,包括數(shù)據(jù)之間的關(guān)系和數(shù)據(jù)的完整性。比如SQL數(shù)據(jù)庫(kù)中某個(gè)屬性的數(shù)據(jù)類(lèi)型是確定的(如整型、字符串等),數(shù)據(jù)的范圍是確定的(如0~1023等)。在NoSQL數(shù)據(jù)庫(kù)中這些都沒(méi)有,在Key-Value存儲(chǔ)中,Key和Value可以是任意的數(shù)據(jù)類(lèi)型。
(2)數(shù)據(jù)處理:傳統(tǒng)的SQL數(shù)據(jù)庫(kù)滿足CAP原則(一致性(Consistency)、可用性(Availability),分區(qū)容忍性(Partition Tolerance))的C和A,所以在P方面很弱,進(jìn)而導(dǎo)致傳統(tǒng)數(shù)據(jù)庫(kù)在可擴(kuò)展性方面,面臨很多問(wèn)題。NoSQL數(shù)據(jù)庫(kù)滿足CAP原則的A和P,所以在C比較弱,進(jìn)而使得非關(guān)系數(shù)據(jù)庫(kù)無(wú)法滿足ACID要求。
(3)接口層的區(qū)別:SQL數(shù)據(jù)庫(kù)都是以SQL語(yǔ)言對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)的,一方面SQL語(yǔ)言提供了強(qiáng)大的査詢功能,另一方面,目前所有的SQL數(shù)據(jù)庫(kù)都支持SQL語(yǔ)言,移植性很高。NoSQL數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)的操作都是通過(guò)一些API實(shí)現(xiàn)的,支持的査詢功能很簡(jiǎn)單, 并且不同的數(shù)據(jù)庫(kù)有不同的API,移植性較差。
(4)優(yōu)勢(shì)和劣勢(shì):SQL數(shù)據(jù)庫(kù)具有髙的一致性,在ACID方面能力非常強(qiáng),移植性很高,但在可擴(kuò)展性方面能力較弱。NoSQL數(shù)據(jù)庫(kù)最大的優(yōu)點(diǎn)是非常高的可擴(kuò)展性,可以通過(guò)増加服務(wù)器租用的數(shù)量不斷提高存儲(chǔ)規(guī)模,具有很強(qiáng)的并發(fā)處理能力,但缺乏數(shù)據(jù)一致性保證。另外由于分布在多個(gè)服務(wù)器上,所以跨表、跨服務(wù)器査詢很困難。