SQL、NoSQL 和 NewSQL,長江後浪推動浪!

做者:hiekay
https://www.jianshu.com/p/ed5...

SQL做爲主要的數據存儲方式已經超過40年,而且經歷了至少兩個指數擴張期:20世紀90年代Web應用程序崛起以後,以及在過去十年中因爲移動設備爆炸引發的擴張。java

所以,愈來愈小的公司開始發現使用數據庫的好處,而像Google這樣的互聯網巨頭則已經將數據單位上升到PB或甚至EB。面試

在SQL 的發展過程當中,產生了許多迭代產品,其中最重要的是SQL,NoSQL和NewSQL — 它們一塊兒負責絕大部分的數據庫市場。數據庫

因此,若是你要選擇一個數據庫工具,你應該選擇哪個?其實,沒有明確的答案。不一樣的人和公司選擇不一樣,這更多地取決於他們對每一個特定項目的偏好和相對優點,而不是其中一個對其餘全部的直接優點。那麼,這些優勢和缺點是什麼?讓咱們來看一下。編程

SQL

SQL是關係型數據庫管理系統(RDBMS),顧名思義,它是圍繞關係代數和元組關係演算構建的。後端

70年代以來,它一直是主要的數據庫解決方案,只是最近纔有了其餘產品的空間。無論有些人說什麼,這意味着它一直能出色地執行普遍的任務。其主要優勢以下:緩存

  • 不一樣的角色(開發者,用戶,數據庫管理員)使用相同的語言。
  • 不一樣的RDBMS使用統一標準的語言。
  • SQL使用一種高級的非結構化查詢語言。
  • 它堅持 ACID 準則 (原子性,一致性,隔離性,持久性),,這些準則保證了數據庫尤爲是每一個事務的穩定性,安全性和可預測性。

如你所見,許多SQL的好處來源於它的統一性,溫馨性和易用性。即便你只有很是有限的SQL知識(或徹底沒有,若是須要),你能夠在像 online SQL Query Builder 這樣的特殊工具幫助下使用它。安全

然而,它的缺點使得它很是不適合某些類型的項目。SQL的主要問題是它難以擴展,由於它的性能隨着數據庫的變大而快速降低。分佈式也是有問題的。服務器

NoSQL和NewSQL出現的緣由之一是,之前的RDBMS的設計不能知足現代數據庫每秒處理的事務數量。像亞馬遜或阿里巴巴等須要處理驚人數據量的巨頭,之前的RDBMS會在幾分鐘內出現問題。多線程

NoSQL (Not Only SQL)

NoSQL愈來愈受歡迎,其中最重要的實現是Apache Cassandra,MongoDB等產品。它主要用於解決SQL的可擴展性問題。所以,它是沒有架構的而且創建在分佈式系統上,這使得它易於擴展和分片。架構

然而,這些好處是以放寬ACID原則爲代價的:NoSQL採起最終一致性原則,而不是全部四個參數在每一個事務中保持一致。這意味着若是在特定時間段內沒有特定數據項的更新,則最終對其全部的訪問都將返回最後更新的值。這就是這樣的系統一般被描述爲提供基本保證的緣由(基本可用,軟狀態,最終一致性) — 而不是ACID。

雖然這個方案極大地增長了可用時間和伸縮性,它也會致使數據丟失----這個問題的嚴重程度取決於數據庫服務器的支持狀況和應用代碼質量.在某些狀況下,這個問題十分嚴重.

另外一個NoSQL出現的問題是如今有不少類型的NoSQL系統,但它們之間卻幾乎沒有一致性.諸如靈活性,性能,複雜性,伸縮性等等特性在不一樣系統間差異巨大,這使得甚至是專家在他們之間都很難選擇.不過,當你根據項目特色做出了合適的選擇,NoSQL能夠在不顯著丟失穩定性的狀況下提供一個遠比SQL系統更高效的解決方案.

NewSQL

NewSQL是一種相對較新的形式,旨在使用現有的編程語言和之前不可用的技術來結合SQL和NoSQL中最好的部分。NewSQL目標是將SQL的ACID保證與NoSQL的可擴展性和高性能相結合。

顯然,由於結合了過去僅單獨存在的優勢,NewSQL看起來頗有前途; 或許,在將來的某個時候,它將成爲大多數人使用的標準。不幸的是,目前大多數NewSQL數據庫都是專有軟件或僅適用於特定場景,這顯然限制了新技術的普及和應用。

除此以外,NewSQL在每一個方面比較均勻,每一個解決方案都有本身的缺點和優點。

例如,SAP HANA能夠輕鬆處理低到中等的事務性工做負載,但不使用本機集羣,MemSQL對於集羣分析頗有用,但在ACID事務上表現出較差的一致性,等等。所以,在這些解決方案變得真正普及以前,可能還須要一段時間。

結論

圍繞SQL有許多謬見和誤解:例如,SQL已過期,應該儘量替換爲NoSQL或New SQL。固然,這不是真的。目前,在三種基本替代方案中沒有明確的領導者 - 每一種都有更適合的項目,而在其餘狀況下不太適合(或徹底不適合)。

所以,沒有廣泛的理想選擇。例如,若是你主要考慮數據庫應始終可用於接受新的內容,則應考慮最終一致性解決方案,如Cassandra或Riak。若是你追求高速緩存SQL,新的緩存數據庫好比VoltDB彷佛是明智的選擇; 等等。

推薦去個人博客閱讀更多:

1.Java JVM、集合、多線程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、後端、架構、阿里巴巴等大廠最新面試題

生活很美好,明天見~

相關文章
相關標籤/搜索