2015-10-17 156 views
-1

我是NoSQL的新手,並試圖理解它的含義。我曾在許多不同的網站上看到許多文章重複「SQL數據庫垂直縮放(通過添加CPU /內存),而NoSQL數據庫水平縮放(通過添加更多可執行分佈式計算的機器)」。爲什麼sql可以垂直擴展和水平nosql

例如,這些文章:
http://dataconomy.com/sql-vs-nosql-need-know/
http://www.thegeekstuff.com/2014/01/sql-vs-nosql-db/

的事情是,我不明白這是爲什麼。

據我所知,SQL和NoSQL(除了可伸縮性問題)之間的主要區別在於SQL存儲在表中,而NoSQL以不同的方式存儲(Key-Value/Graph/xml等) )。

我似乎無法理解這兩個事實(可伸縮性和存儲策略)之間的聯繫。這些對我來說似乎沒有關係(可能是由於缺乏理解)。

+1

現代SQL數據庫和NoSQL數據庫都可以利用多個處理器和多個磁盤。兩者通常都可以利用更多的內存。對於這兩種情況,將新硬件添加到現有配置時可能會有問題,但這取決於數據庫。在較高的層面上,文章具有誤導性或您的解釋不完整。 –

+0

感謝您的回答。我添加了文章。 也許你可以看看,如果這些確實是誤導性的文章,或者這是我的解釋不好。 –

回答

2

這太長了評論,我承認它包含意見。

這些文章通常是合理的。正如這兩篇文章指出的那樣,NoSQL技術和SQL技術(由於缺乏更好的術語)在現今扮演重要角色。這個討論有時候讓人想起分級數據庫和關係數據庫。

我不同意可擴展性差異。討論忽略了諸如Hive,PrestoDB和BigQuery等基於傳統RDBMS精神的高度可擴展技術的技術。

RDBMS和NoSQL之間的主要區別(在我看來)是符合ACID和數據結構。首先是關係數據庫帶來的「負擔」,不管是好還是壞 - 對於金融交易來說確實非常方便,但是以其他目的的開銷爲代價。第二個是傳統數據庫正朝着更好地處理非結構化數據的方向發展,直接支持嵌套表格,JSON和XML格式。然而,結構很重要,因爲數據科學家們在與數據交互時可能會很難學會。

大型可擴展鍵值數據庫的設計考慮了「橫向」可擴展性。這與缺乏純ACID特性相結合,有助於重新平衡新硬件的數據 - 假設您已經正確設計了數據庫(並且這可能是一個很大的假設)。數據庫如Oracle,DB2和Teradata幾十年來一直支持並行處理(雖然更偏向於單個服務器,儘管採用無共享架構)。他們的技術會預先考慮更現代的基於Apache的系統(因爲缺乏更好的術語),但這並不意味着它們不能跨多個處理器進行擴展。

Hive,Redshift,BigQuery和PrestoDB等新數據庫以更現代的「水平」可伸縮的意義(至少在查詢中)提供了基於SQL的接口。 Postgres世界正在進行大量的工作來支持並行處理,而Greenplum,Netezza,Vertica等數據庫的例子則認爲關係數據庫不能跨多個獨立處理器進行擴展。