你應該使用NoSQL資料庫、SQL資料庫還是兩者都用?

SQL和NoSQL之爭只不過是關係資料庫和非關係資料庫的比較。區別在於它們是如何構建的、存儲信息的種類以及如何存儲信息。關係資料庫是結構化的,非關係資料庫是面向文檔、分散式的。四十多年來,結構化查詢語言(SQL)資料庫一直是主要的數據存儲機制。

隨著Web應用程序以及PostgreSQL、MySQL和SQLite等開源技術日益盛行,使用率在上世紀90年代末急劇提高。儘管NoSQL資料庫自上世紀60年代以來就已存在,但最近開始受到追捧,比如MongoDB、CouchDB、Redis和Apache Cassandra等流行的選擇方案。說到底,SQL和NoSQL都做同樣的事情:存儲數據,只不過方法不一樣。儘管NoSQL日益流行,卻不是取代SQL的技術,而是另一種選擇。一些項目更適合使用SQL資料庫,而其他項目適用於NoSQL。一些項目可以換著使用兩者。

Advertisements

1.SQL

結構化查詢語言(SQL)是存儲數據的更結構化、更僵硬的方式,就像電話簿那樣。關係資料庫要高效,你得以一種非常條理化的方式來存儲數據。SQL資料庫仍很流行,因為它們天生適用於許多古老的軟體堆棧,包括LAMP和基於Ruby的堆棧。這些資料庫得到了廣泛的支持,並得到了充分的理解;如果你遇到問題,這可能是一大有利條件。

說到資料庫技術,不存在一應俱全式的解決方案。這就是為什麼大多數公司同時依賴非關係資料庫和關係資料庫來完成不同的任務。不過在許多情況下,儘管NoSQL資料庫憑藉速度和可擴展性越來越受歡迎,但高度結構化的SQL資料庫更受喜愛。

優點:

  • ACID(原子性、一致性、隔離性和持久性)合規性準確地表明事務如何與資料庫交互,以此減少異常情況,並保護資料庫的完整性。NoSQL資料庫常常具有處理速度快、靈活的優點,但犧牲了ACID合規性。

    Advertisements

  • 你的數據保持不變、結構化。如果貴公司沒有迎來大規模發展(那需要更多的伺服器),而且只處理一致的數據,那麼恐怕沒有理由使用旨在支持高流量和眾多數據類型的系統。

  • 由於很早就面市了,這些工具隨帶更好的支持、產品套件和附件以管理這些資料庫。

缺點:

  • SQL的主要問題是隨著資料庫變大而進行擴展。你發現,即使可擴展性通常在生產環境中進行了測試,但常常不如NoSQL資料庫。分片(sharding)同樣存在相當大的問題。

2.NoSQL

如果貴公司在處理大量非結構化數據,你的數據要求一開始又並不清晰,那麼可能無法開發模式(schema)明確定義的關係資料庫。使用非關係資料庫可以獲得比傳統資料庫高得多的靈活性。不妨把非關係型資料庫想象成檔案夾,整理各種類型的相關信息。

優點:

  • 推動NoSQL發展的重大因素是大數據,促使CouchDB、MongoDB、Cassandra和HBase之類的NoSQL資料庫大行其道。NoSQL資料庫確保:當伺服器端應用程序的所有其他組件都被設計成無縫、快速時,數據沒有成為瓶頸。

  • 你可以存儲大量幾乎沒有結構的數據。此外,NoSQL資料庫對於可以一起存儲的數據類型沒有限制,你的要求若有變化,可以添加更多的新類型。若使用基於文檔的資料庫,還可以將數據存儲在一個地方,無需事先定義數據類型。

  • 基於雲的存儲是一種節省成本的優秀解決方案,不過你得將數據分散在多台伺服器上來進行擴展。NoSQL資料庫旨在直接可以跨多個數據中心進行擴展,沒有太大的麻煩。

  • 你不必事先準備好NoSQL數據。NoSQL資料庫的非關係性質讓你可以迅速創建資料庫,沒必要開發詳細的資料庫模型,因而為你節省大量的開發時間。

缺點:

  • 由於歷史較短,NoSQL社區缺乏MySQL用戶群的成熟性。雖然眼下NoSQL社區在迅猛發展,但相比MySQL之類的SQL資料庫管理系統,很難與其經驗豐富的最終用戶組成的龐大網路相競爭。

  • NoSQL資料庫的一大問題是缺乏用於性能測試和分析的報告工具。另一方面,使用SQL,你能找到一大批報告工具幫助證明應用程序的有效性。

  • 你將面臨與SQL指令兼容的問題。在查詢語言中,新的資料庫使用自己的特性,目前還無法與關係資料庫中使用的SQL完全兼容。

  • 缺乏標準化。現在有許多NoSQL資料庫,卻仍然沒有標準,而關係資料庫有標準。NoSQL缺乏標準化的這個現狀可能會在遷移過程中帶來問題。

結論

如今,NoSQL資料庫正成為資料庫市場的一個重要角色。憑藉諸多優點,它們會成為企業領域真正改變遊戲規則的技術。對於希望整合大數據的公司而言,成本更低、更易於擴展和開源等特性使得NoSQL成為一種誘人的選擇。

即便如此,NoSQL還是一種比較年輕的技術,沒有MySQL等SQL資料庫提供的那一套標準。一些人認為NoSQL是未來的方向,另一些人擔心它缺乏ACID合規性和標準化。最終,貴公司複雜的業務需求以及所使用數據的數量和種類將決定選擇SQL還是選擇NoSQL。

不論好壞,對於大多數項目而言,你可以有一個非分散式、可擴展的關係資料庫作為系統中的單一數據源(single point of truth)。這是保持數據一致性,支持複雜查詢的一種簡易方法。

Advertisements

你可能會喜歡