SQL作為主要的數(shù)據(jù)存儲(chǔ)方式已經(jīng)超過40年拄踪,并且經(jīng)歷了至少兩個(gè)指數(shù)擴(kuò)張期:20世紀(jì)90年代Web應(yīng)用程序崛起之后蝇恶,以及在過去十年中由于移動(dòng)設(shè)備爆炸引起的擴(kuò)張。 因此惶桐,越來越小的公司開始發(fā)現(xiàn)使用數(shù)據(jù)庫的好處撮弧,而像Google這樣的互聯(lián)網(wǎng)巨頭則已經(jīng)將數(shù)據(jù)單位上升到PB或甚至EB。
在SQL 的發(fā)展過程中姚糊,產(chǎn)生了許多迭代產(chǎn)品贿衍,其中最重要的是SQL,NoSQL和NewSQL — 它們一起負(fù)責(zé)絕大部分的數(shù)據(jù)庫市場(chǎng)救恨。
所以贸辈,如果你要選擇一個(gè)數(shù)據(jù)庫工具,你應(yīng)該選擇哪一個(gè)肠槽? 其實(shí)擎淤,沒有明確的答案。 不同的人和公司選擇不同秸仙,這更多地取決于他們對(duì)每個(gè)特定項(xiàng)目的偏好和相對(duì)優(yōu)勢(shì)嘴拢,而不是其中一個(gè)對(duì)其他所有的直接優(yōu)勢(shì)。 那么寂纪,這些優(yōu)點(diǎn)和缺點(diǎn)是什么席吴? 讓我們來看一下。
SQL
SQL是關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)捞蛋,顧名思義孝冒,它是圍繞關(guān)系代數(shù)和元組關(guān)系演算構(gòu)建的。 70年代以來拟杉,它一直是主要的數(shù)據(jù)庫解決方案庄涡,只是最近才有了其他產(chǎn)品的空間。 不管有些人說什么搬设,這意味著它一直能出色地執(zhí)行廣泛的任務(wù)穴店。 其主要優(yōu)點(diǎn)如下:
- 不同的角色(開發(fā)者,用戶焕梅,數(shù)據(jù)庫管理員)使用相同的語言。
- 不同的RDBMS使用統(tǒng)一標(biāo)準(zhǔn)的語言卦洽。
- SQL使用一種高級(jí)的非結(jié)構(gòu)化查詢語言贞言。.
- 它堅(jiān)持 ACID 準(zhǔn)則 (原子性,一致性阀蒂,隔離性该窗,持久性),弟蚀,這些準(zhǔn)則保證了數(shù)據(jù)庫尤其是每個(gè)事務(wù)的穩(wěn)定性,安全性和可預(yù)測(cè)性酗失。
如你所見义钉,許多SQL的好處來源于它的統(tǒng)一性,舒適性和易用性规肴。 即使你只有非常有限的SQL知識(shí)(或完全沒有捶闸,如果需要),你可以在像 online SQL Query Builder 這樣的特殊工具幫助下使用它拖刃。
然而删壮,它的缺點(diǎn)使得它非常不適合某些類型的項(xiàng)目。 SQL的主要問題是它難以擴(kuò)展兑牡,因?yàn)樗男阅茈S著數(shù)據(jù)庫的變大而快速下降央碟。 分布式也是有問題的。
NoSQL和NewSQL出現(xiàn)的原因之一是均函,以前的RDBMS的設(shè)計(jì)不能滿足現(xiàn)代數(shù)據(jù)庫每秒處理的事務(wù)數(shù)量亿虽。 像亞馬遜或阿里巴巴等需要處理驚人數(shù)據(jù)量的巨頭,以前的RDBMS會(huì)在幾分鐘內(nèi)出現(xiàn)問題苞也。
NoSQL (Not Only SQL)
NoSQL越來越受歡迎洛勉,其中最重要的實(shí)現(xiàn)是Apache Cassandra,MongoDB等產(chǎn)品墩朦。 它主要用于解決SQL的可擴(kuò)展性問題坯认。 因此,它是沒有架構(gòu)的并且建立在分布式系統(tǒng)上氓涣,這使得它易于擴(kuò)展和分片牛哺。
然而,這些好處是以放寬ACID原則為代價(jià)的:NoSQL采取最終一致性原則劳吠,而不是所有四個(gè)參數(shù)在每個(gè)事務(wù)中保持一致引润。 這意味著如果在特定時(shí)間段內(nèi)沒有特定數(shù)據(jù)項(xiàng)的更新,則最終對(duì)其所有的訪問都將返回最后更新的值痒玩。 這就是這樣的系統(tǒng)通常被描述為提供基本保證的原因(基本可用淳附,軟狀態(tài),最終一致性) — 而不是ACID蠢古。
雖然這個(gè)方案極大地增加了可用時(shí)間和伸縮性,它也會(huì)導(dǎo)致數(shù)據(jù)丟失----這個(gè)問題的嚴(yán)重程度取決于數(shù)據(jù)庫服務(wù)器的支持情況和應(yīng)用代碼質(zhì)量.在某些情況下,這個(gè)問題十分嚴(yán)重.
另一個(gè)NoSQL出現(xiàn)的問題是現(xiàn)在有很多類型的NoSQL系統(tǒng),但它們之間卻幾乎沒有一致性.諸如靈活性,性能,復(fù)雜性,伸縮性等等特性在不同系統(tǒng)間差別巨大,這使得甚至是專家在他們之間都很難選擇.不過,當(dāng)你根據(jù)項(xiàng)目特點(diǎn)作出了合適的選擇,NoSQL可以在不顯著丟失穩(wěn)定性的情況下提供一個(gè)遠(yuǎn)比SQL系統(tǒng)更高效的解決方案.
NewSQL
NewSQL是一種相對(duì)較新的形式奴曙,旨在使用現(xiàn)有的編程語言和以前不可用的技術(shù)來結(jié)合SQL和NoSQL中最好的部分。 NewSQL目標(biāo)是將SQL的ACID保證與NoSQL的可擴(kuò)展性和高性能相結(jié)合草讶。
顯然洽糟,因?yàn)榻Y(jié)合了過去僅單獨(dú)存在的優(yōu)點(diǎn),NewSQL看起來很有前途; 或許,在未來的某個(gè)時(shí)候坤溃,它將成為大多數(shù)人使用的標(biāo)準(zhǔn)拍霜。 不幸的是,目前大多數(shù)NewSQL數(shù)據(jù)庫都是專有軟件或僅適用于特定場(chǎng)景薪介,這顯然限制了新技術(shù)的普及和應(yīng)用祠饺。
除此之外,NewSQL在每個(gè)方面比較均勻汁政,每個(gè)解決方案都有自己的缺點(diǎn)和優(yōu)勢(shì)道偷。 例如,SAP HANA可以輕松處理低到中等的事務(wù)性工作負(fù)載烂完,但不使用本機(jī)集群试疙,MemSQL對(duì)于集群分析很有用,但在ACID事務(wù)上表現(xiàn)出較差的一致性抠蚣,等等祝旷。 因此,在這些解決方案變得真正普及之前嘶窄,可能還需要一段時(shí)間怀跛。
結(jié)論
圍繞SQL有許多謬見和誤解:例如,SQL已過時(shí)柄冲,應(yīng)該盡可能替換為NoSQL或New SQL吻谋。 當(dāng)然,這不是真的现横。 目前漓拾,在三種基本替代方案中沒有明確的領(lǐng)導(dǎo)者 - 每一種都有更適合的項(xiàng)目,而在其他情況下不太適合(或完全不適合)戒祠。 因此骇两,沒有普遍的理想選擇。 例如姜盈,如果你主要考慮數(shù)據(jù)庫應(yīng)始終可用于接受新的內(nèi)容低千,則應(yīng)考慮最終一致性解決方案,如Cassandra或Riak馏颂。 如果你追求高速緩存SQL示血,新的緩存數(shù)據(jù)庫比如VoltDB似乎是明智的選擇; 等等。