你應該使用NoSQL數(shù)據(jù)庫、SQL數(shù)據(jù)庫還是兩者都用?
譯文【51CTO.com快譯】SQL和NoSQL之爭只不過是關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫的比較。區(qū)別在于它們是如何構建的、存儲信息的種類以及如何存儲信息。關系數(shù)據(jù)庫是結構化的,非關系數(shù)據(jù)庫是面向文檔、分布式的。四十多年來,結構化查詢語言(SQL)數(shù)據(jù)庫一直是主要的數(shù)據(jù)存儲機制。
隨著Web應用程序以及PostgreSQL、MySQL和SQLite等開源技術日益盛行,使用率在上世紀90年代末急劇提高。盡管NoSQL數(shù)據(jù)庫自上世紀60年代以來就已存在,但最近開始受到追捧,比如MongoDB、CouchDB、Redis和Apache Cassandra等流行的選擇方案。說到底,SQL和NoSQL都做同樣的事情:存儲數(shù)據(jù),只不過方法不一樣。盡管NoSQL日益流行,卻不是取代SQL的技術,而是另一種選擇。一些項目更適合使用SQL數(shù)據(jù)庫,而其他項目適用于NoSQL。一些項目可以換著使用兩者。
1.SQL
結構化查詢語言(SQL)是存儲數(shù)據(jù)的更結構化、更僵硬的方式,就像電話簿那樣。關系數(shù)據(jù)庫要高效,你得以一種非常條理化的方式來存儲數(shù)據(jù)。SQL數(shù)據(jù)庫仍很流行,因為它們天生適用于許多古老的軟件堆棧,包括LAMP和基于Ruby的堆棧。這些數(shù)據(jù)庫得到了廣泛的支持,并得到了充分的理解;如果你遇到問題,這可能是一大有利條件。
說到數(shù)據(jù)庫技術,不存在一應俱全式的解決方案。這就是為什么大多數(shù)公司同時依賴非關系數(shù)據(jù)庫和關系數(shù)據(jù)庫來完成不同的任務。不過在許多情況下,盡管NoSQL數(shù)據(jù)庫憑借速度和可擴展性越來越受歡迎,但高度結構化的SQL數(shù)據(jù)庫更受喜愛。
優(yōu)點:
- ACID(原子性、一致性、隔離性和持久性)合規(guī)性準確地表明事務如何與數(shù)據(jù)庫交互,以此減少異常情況,并保護數(shù)據(jù)庫的完整性。NoSQL數(shù)據(jù)庫常常具有處理速度快、靈活的優(yōu)點,但犧牲了ACID合規(guī)性。
- 你的數(shù)據(jù)保持不變、結構化。如果貴公司沒有迎來大規(guī)模發(fā)展(那需要更多的服務器),而且只處理一致的數(shù)據(jù),那么恐怕沒有理由使用旨在支持高流量和眾多數(shù)據(jù)類型的系統(tǒng)。
- 由于很早就面市了,這些工具隨帶更好的支持、產品套件和附件以管理這些數(shù)據(jù)庫。
缺點:
- SQL的主要問題是隨著數(shù)據(jù)庫變大而進行擴展。你發(fā)現(xiàn),即使可擴展性通常在生產環(huán)境中進行了測試,但常常不如NoSQL數(shù)據(jù)庫。分片(sharding)同樣存在相當大的問題。
2.NoSQL
如果貴公司在處理大量非結構化數(shù)據(jù),你的數(shù)據(jù)要求一開始又并不清晰,那么可能無法開發(fā)模式(schema)明確定義的關系數(shù)據(jù)庫。使用非關系數(shù)據(jù)庫可以獲得比傳統(tǒng)數(shù)據(jù)庫高得多的靈活性。不妨把非關系型數(shù)據(jù)庫想象成檔案夾,整理各種類型的相關信息。
優(yōu)點:
- 推動NoSQL發(fā)展的重大因素是大數(shù)據(jù),促使CouchDB、MongoDB、Cassandra和HBase之類的NoSQL數(shù)據(jù)庫大行其道。NoSQL數(shù)據(jù)庫確保:當服務器端應用程序的所有其他組件都被設計成無縫、快速時,數(shù)據(jù)沒有成為瓶頸。
- 你可以存儲大量幾乎沒有結構的數(shù)據(jù)。此外,NoSQL數(shù)據(jù)庫對于可以一起存儲的數(shù)據(jù)類型沒有限制,你的要求若有變化,可以添加更多的新類型。若使用基于文檔的數(shù)據(jù)庫,還可以將數(shù)據(jù)存儲在一個地方,無需事先定義數(shù)據(jù)類型。
- 基于云的存儲是一種節(jié)省成本的優(yōu)秀解決方案,不過你得將數(shù)據(jù)分散在多臺服務器上來進行擴展。NoSQL數(shù)據(jù)庫旨在直接可以跨多個數(shù)據(jù)中心進行擴展,沒有太大的麻煩。
- 你不必事先準備好NoSQL數(shù)據(jù)。NoSQL數(shù)據(jù)庫的非關系性質讓你可以迅速創(chuàng)建數(shù)據(jù)庫,沒必要開發(fā)詳細的數(shù)據(jù)庫模型,因而為你節(jié)省大量的開發(fā)時間。
缺點:
- 由于歷史較短,NoSQL社區(qū)缺乏MySQL用戶群的成熟性。雖然眼下NoSQL社區(qū)在迅猛發(fā)展,但相比MySQL之類的SQL數(shù)據(jù)庫管理系統(tǒng),很難與其經驗豐富的最終用戶組成的龐大網(wǎng)絡相競爭。
- NoSQL數(shù)據(jù)庫的一大問題是缺乏用于性能測試和分析的報告工具。另一方面,使用SQL,你能找到一大批報告工具幫助證明應用程序的有效性。
- 你將面臨與SQL指令兼容的問題。在查詢語言中,新的數(shù)據(jù)庫使用自己的特性,目前還無法與關系數(shù)據(jù)庫中使用的SQL完全兼容。
- 缺乏標準化?,F(xiàn)在有許多NoSQL數(shù)據(jù)庫,卻仍然沒有標準,而關系數(shù)據(jù)庫有標準。NoSQL缺乏標準化的這個現(xiàn)狀可能會在遷移過程中帶來問題。
結論
如今,NoSQL數(shù)據(jù)庫正成為數(shù)據(jù)庫市場的一個重要角色。憑借諸多優(yōu)點,它們會成為企業(yè)領域真正改變游戲規(guī)則的技術。對于希望整合大數(shù)據(jù)的公司而言,成本更低、更易于擴展和開源等特性使得NoSQL成為一種誘人的選擇。
即便如此,NoSQL還是一種比較年輕的技術,沒有MySQL等SQL數(shù)據(jù)庫提供的那一套標準。一些人認為NoSQL是未來的方向,另一些人擔心它缺乏ACID合規(guī)性和標準化。最終,貴公司復雜的業(yè)務需求以及所使用數(shù)據(jù)的數(shù)量和種類將決定選擇SQL還是選擇NoSQL。
不論好壞,對于大多數(shù)項目而言,你可以有一個非分布式、可擴展的關系數(shù)據(jù)庫作為系統(tǒng)中的單一數(shù)據(jù)源(single point of truth)。這是保持數(shù)據(jù)一致性,支持復雜查詢的一種簡易方法。
我希望本文對你有所幫助,但請記住每個項目不一樣,最終你要了解什么最適合你的要求。無論選擇是什么,我們開發(fā)人員都很擅長證明我們的技術選擇的合理性。不過我建議在充分考慮風險和優(yōu)勢后,再試用新技術。
原文標題:Should You Use NoSQL Or SQL Db Or Both?,作者:Amit Ashwini
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】