關(guān)系型數(shù)據(jù)庫與NoSQL的對比
SQL(結(jié)構(gòu)化的查詢語言)數(shù)據(jù)庫是過去四十年間存儲數(shù)據(jù)的主要方式。20世紀(jì)90年代末隨著Web應(yīng)用和MySQL、PostgreSQL和SQLite等開源數(shù)據(jù)庫的興起,用戶爆炸式的增長。
NoSQL數(shù)據(jù)庫自從20世紀(jì)60年代就已經(jīng)存在了,直到MongoDB, CouchDB, Redis 和 Apache Cassandra等數(shù)據(jù)庫的流行才獲取了更多的關(guān)注。
你可以很容易地找到許多關(guān)于如何使用一款特定的SQL或NoSQL的教程,但是很少有討論你為什么優(yōu)先的使用一款而不適用另一款。我希望我能夠填補(bǔ)這個空白。在這篇文章中將會介紹它們之間的不同。在后續(xù)的文章中,我們將會根據(jù)典型的場景來確定最佳的選擇。
大多數(shù)的例子都適用于流行的關(guān)系型數(shù)據(jù)庫MySQL和MongoDB NoSQL數(shù)據(jù)庫.其它的SQL/NoSQL也是類似的,但是在語法和特點上會有一些細(xì)微的差別。
SQL與NoSQL之間的戰(zhàn)爭
在我們進(jìn)一步討論之前,我們先不去考慮各種觀點......
觀點一:NoSQL將會取代SQL
這個觀點就像是說船將會取代汽車,因為船是一種新的技術(shù)一樣,這是不可能發(fā)生的事情。SQL和NoSQL有著相同的目標(biāo):存儲數(shù)據(jù)。它們存儲數(shù)據(jù)的方式不同,這可能會影響到你開發(fā)的項目,一種會簡化你的開發(fā),一種會阻礙你的開發(fā)。盡管目前NoSQL數(shù)據(jù)庫非常的火爆,但是NoSQL是不能取代SQL的--它僅僅是SQL的一種替代品。
觀點二:NoSQL要比SQL好/壞
一些項目可能會更適合使用SQL數(shù)據(jù)庫,然而一些項目可能會比較適合使用NoSQL,有些項目使用哪一種都可以很好地達(dá)到預(yù)期的效果。本文不支持任何一方,因為沒有一種方式可以使用到所有的項目中去。
觀點三:SQL與NoSQL之間有明顯的差別
這個觀點并不是很正確。一些SQL數(shù)據(jù)庫也采用了NoSQL數(shù)據(jù)庫的特性,反之亦然。在選擇數(shù)據(jù)庫方面的界限變得越來越模糊了,并且一些新的混合型數(shù)據(jù)庫將會在不久的將來提供更多的選擇。
觀點四:語言或框架決定使用何種數(shù)據(jù)庫
我們已經(jīng)習(xí)慣于使用一些現(xiàn)有的框架進(jìn)行開發(fā),例如:
- LAMP:Linux,Apache,MySQL(SQL),PHP
- MEAN:MongoDB(NoSQL),Express,Angular,Node.js
- .NET,IIS和SQL Server
- Java,Apache和Oracle
由于很多實際的,歷史的和商業(yè)化的原因?qū)е铝诉@些框架的發(fā)展,但是它們并不是一種規(guī)則約束。你可以在你的PHP和.NET的項目中使用MongoDB。也可以在Node.js中使用MySQL或者
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式