關(guān)系型數(shù)據(jù)庫(kù)與NoSQL的對(duì)比

SQL(結(jié)構(gòu)化的查詢(xún)語(yǔ)言)數(shù)據(jù)庫(kù)是過(guò)去四十年間存儲(chǔ)數(shù)據(jù)的主要方式。20世紀(jì)90年代末隨著Web應(yīng)用和MySQL、PostgreSQL和SQLite等開(kāi)源數(shù)據(jù)庫(kù)的興起,用戶(hù)爆炸式的增長(zhǎng)。

NoSQL數(shù)據(jù)庫(kù)自從20世紀(jì)60年代就已經(jīng)存在了,直到MongoDB, CouchDB, Redis 和 Apache Cassandra等數(shù)據(jù)庫(kù)的流行才獲取了更多的關(guān)注。

你可以很容易地找到許多關(guān)于如何使用一款特定的SQL或NoSQL的教程,但是很少有討論你為什么優(yōu)先的使用一款而不適用另一款。我希望我能夠填補(bǔ)這個(gè)空白。在這篇文章中將會(huì)介紹它們之間的不同。在后續(xù)的文章中,我們將會(huì)根據(jù)典型的場(chǎng)景來(lái)確定最佳的選擇。

大多數(shù)的例子都適用于流行的關(guān)系型數(shù)據(jù)庫(kù)MySQLMongoDB NoSQL數(shù)據(jù)庫(kù).其它的SQL/NoSQL也是類(lèi)似的,但是在語(yǔ)法和特點(diǎn)上會(huì)有一些細(xì)微的差別。

SQL與NoSQL之間的戰(zhàn)爭(zhēng)

在我們進(jìn)一步討論之前,我們先不去考慮各種觀點(diǎn)......

觀點(diǎn)一:NoSQL將會(huì)取代SQL

這個(gè)觀點(diǎn)就像是說(shuō)船將會(huì)取代汽車(chē),因?yàn)榇且环N新的技術(shù)一樣,這是不可能發(fā)生的事情。SQL和NoSQL有著相同的目標(biāo):存儲(chǔ)數(shù)據(jù)。它們存儲(chǔ)數(shù)據(jù)的方式不同,這可能會(huì)影響到你開(kāi)發(fā)的項(xiàng)目,一種會(huì)簡(jiǎn)化你的開(kāi)發(fā),一種會(huì)阻礙你的開(kāi)發(fā)。盡管目前NoSQL數(shù)據(jù)庫(kù)非常的火爆,但是NoSQL是不能取代SQL的--它僅僅是SQL的一種替代品。

觀點(diǎn)二:NoSQL要比SQL好/壞

一些項(xiàng)目可能會(huì)更適合使用SQL數(shù)據(jù)庫(kù),然而一些項(xiàng)目可能會(huì)比較適合使用NoSQL,有些項(xiàng)目使用哪一種都可以很好地達(dá)到預(yù)期的效果。本文不支持任何一方,因?yàn)闆](méi)有一種方式可以使用到所有的項(xiàng)目中去。

觀點(diǎn)三:SQL與NoSQL之間有明顯的差別

這個(gè)觀點(diǎn)并不是很正確。一些SQL數(shù)據(jù)庫(kù)也采用了NoSQL數(shù)據(jù)庫(kù)的特性,反之亦然。在選擇數(shù)據(jù)庫(kù)方面的界限變得越來(lái)越模糊了,并且一些新的混合型數(shù)據(jù)庫(kù)將會(huì)在不久的將來(lái)提供更多的選擇。

觀點(diǎn)四:語(yǔ)言或框架決定使用何種數(shù)據(jù)庫(kù)

我們已經(jīng)習(xí)慣于使用一些現(xiàn)有的框架進(jìn)行開(kāi)發(fā),例如:

  • LAMP:Linux,Apache,MySQL(SQL),PHP
  • MEAN:MongoDB(NoSQL),Express,Angular,Node.js
  • .NET,IIS和SQL Server
  • Java,Apache和Oracle

由于很多實(shí)際的,歷史的和商業(yè)化的原因?qū)е铝诉@些框架的發(fā)展,但是它們并不是一種規(guī)則約束。你可以在你的PHP.NET的項(xiàng)目中使用MongoDB。也可以在Node.js中使用MySQL或者

網(wǎng)友評(píng)論