當開發人員首次考慮管理數據或為其應用程序選擇數據庫時,他們心中常浮現的第一個想法通常是——
——沒錯,就是表格。
然後他們為不同類型的數據設置不同的表格,例如為用戶設置一個表格,為產品、訂單等設置另一個表格。由於數據分佈在不同的表格中,它們之間必然存在關係。因此,表格將通過外鍵參考其他表格中的項目。最終,他們可能每次都會選擇關聯式數據庫來解決問題。特別是在處理關係時,非關聯式數據庫的想法可能會顯得非常不直觀。
但問題是——數據並非總是平面的。數據需求可能復雜,當開發人員在考慮數據時沒有考慮數據庫時,它通常不是表格形式。相反,它可能是嵌套的、階層式的,甚至是類似圖形的。
每次開始處理數據時都不需要想像一張表格。在現代應用程序中,數據通常需要具有複雜數據類型的靈活模式。因此,將其扁平化為表格可能並不總是最好的想法。此外,關聯式數據庫也具有其自身的擴展限制。隨著擴展,您可能需要擔心分區,這通常需要進行重大的應用程序級更改。
進入非關聯型資料庫,或更常被稱為NoSQL。如果你在設計選擇中排斥它們,可能會錯過充分發揮NoSQL的潛力。在本文中,我們將快速定義什麼是非關聯型資料庫,然後針對不同的現實問題提供不同的NoSQL資料庫選擇。
在文章結尾,我們還將討論NoSQL資料庫相對於關聯型資料庫的優勢,並簡要提及在某些情況下,關聯型資料庫仍然是更好的選擇。
非關聯型資料庫,或NoSQL
簡單來說,這些資料庫以非表格格式存儲資料。它們有不同類型,每種類型都是為特定目的和支援的非結構化資料而設計的。最常見的類型有:
- 文件資料庫:以類似JSON的文件格式存儲資料
- 鍵值資料庫:以“鍵-值”結構存儲資料,適用於唯一鍵。
- 圖形資料庫:使用節點、邊和屬性來表示和存儲數據點之間的關係。
其他類型還包括列導向、內存型和時間序列資料庫。
不同的NoSQL資料庫提供商提供功能,例如在特定字段上創建索引、開發者友好的SDK、高可用性、事務操作,以及輕鬆擴展或縮減資料庫的能力。
用NoSQL解決現實問題
讓我們看看一些使用 NoSQL 數據庫解決現實生活問題的例子。
建立支持評論和標籤的部落格應用程式
文檔數據庫 最適合這類內容管理系統。每個內容可以是一個獨立的文檔。架構靈活,每個文檔可以包含子集合。您可以利用文檔數據庫提供商的數組字段索引功能來執行複雜查詢,例如獲取所有帶有標籤的部落格。
社交和專業網絡平台
圖形數據庫幫助定義人與人之間的複雜關係。通過圖形搜索輕鬆找到朋友的朋友。
物聯網傳感器數據
使用時間序列數據來處理來自傳感器設備的大量時間戳數據。
購物車
使用鍵值對數據庫,提供高併發的快速讀取和寫入。您還可以使用鍵值數據庫來存儲用戶的會話信息,購物車可以是會話中的一個字段(針對個別購物會話)。
推薦引擎
使用圖形數據庫來映射用戶、產品和偏好之間的關係。
Where NoSQL Outperforms Relational Databases
以下是 NoSQL 數據庫在某些方面優於關聯數據庫的一些指標:
- 開發人員生產力:NoSQL數據庫提供商提供針對現代應用程序開發量身定制的API和SDK,可以加快原型設計和開發速度。
- 可擴展性:NoSQL數據庫可以水平擴展(只需添加更多服務器或節點),這比關聯數據庫所需的垂直擴展更具成本效益且更易管理。
- 靈活性:NoSQL提供靈活的架構,非常適合敏捷開發和應用需求的演進。
- 處理嵌套數據:數據通常是嵌套或階層式的,比如JSON或XML格式。NoSQL數據庫可以支持這些格式,而使用關聯數據庫可能需要進行複雜的轉換。
在哪些情況下關聯數據庫仍具有優勢
以下是一些情況下關聯數據庫仍然相關且是一個不錯的選擇。
- 分析和報告:關聯數據庫經過優化,適用於特定查詢、聚合和報告。對於任何分析和報告使用情況,關聯數據庫仍然是首選。
- 大量使用關聯和聯接:雖然您仍可以在NoSQL數據庫中管理和處理關聯,但如果您的應用程序非常依賴不同數據集之間的聯接,關聯數據庫仍然是一個不錯的選擇。
- 一致性高於可用性: 在數據一致性比可用性更重要的情況下(例如,金融交易),關聯數據庫可以提供更高的保證。
這篇文章到此結束。我們探討了什麼是NoSQL數據庫以及它們如何解決數據管理中的現實挑戰。NoSQL數據庫為現代應用程序開啟了一個可能性的新世界,從靈活處理複雜數據結構到提供商提供的強大功能。對於那些尚未嘗試過NoSQL的人,希望這能激勵你在下個項目中試一試——你可能會發現它正好符合你的需求。
Source:
https://dzone.com/articles/nosql-for-relational-minds