掌握 NoSQL 數據庫
對于大多數開發者來說,關系數據庫是最佳選擇,因為它們已經存在超過40年,而且在歷史上一直表現良好。然而,如果關系數據庫不適用于您的特定用例,那么超越關系數據庫是至關重要的。非關系數據庫可能是正確的選擇,如果:
- 您的應用程序需要超低延遲。
- 您的數據是非結構化的,或者您沒有任何關系數據。
- 您只需要序列化和反序列化數據(JSON、XML、YAML 等)。
- 您需要存儲大量數據。
圖片
鍵值存儲

- Amazon DynamoDB: DynamoDB是由亞馬遜網絡服務(AWS)提供的全面托管的NoSQL數據庫服務。它支持鍵值和文檔數據模型。DynamoDB以其低延遲性能和無縫可擴展性而聞名。它還提供諸如內存中緩存(DAX)、按需備份、恢復到某一時刻和自動擴展等功能。
- DynamoDB的低延遲和高吞吐量的能力使其成為游戲應用的良好選擇,速度至關重要。例如,Fortnite使用DynamoDB存儲游戲配置文件,跟蹤游戲內購買并維護排行榜。
- 由于其可擴展性和全面托管的特性,DynamoDB在微服務架構中也得到了廣泛應用。Airbnb使用DynamoDB存儲酒店預訂數據,并在高峰時期管理高需求。
- DynamoDB是一個全面托管的服務,這意味著AWS處理所有操作方面的工作,如硬件供應、設置、配置、復制、軟件補丁、擴展和備份。如果您希望避免管理數據庫的開銷,DynamoDB可能是一個不錯的選擇。其他NoSQL數據庫,如MongoDB、Cassandra或CouchDB,如果需要豐富的查詢功能、可調一致性或多主復制,則可能更適合。
圖存儲

(1) Neo4j: Neo4j是由Neo4j,Inc.開發的圖數據庫管理系統。它旨在輕松高效地處理數據關系。Neo4j使用圖模型來表示數據,使其非常適用于處理具有復雜關系和動態模式的數據。它支持ACID事務,并提供一種稱為Cypher的強大而表達豐富的圖查詢語言。
(2) Neo4j(圖數據庫):
- 社交網絡: 像Neo4j這樣的圖數據庫非常適用于社交網絡應用。例如,如果您正在構建一個建議朋友的功能,圖數據庫可以輕松遍歷不同用戶之間的關系。例如,LinkedIn使用圖數據庫來實現他們的“你可能認識的人”功能。
- 推薦引擎: 像Walmart這樣的公司使用圖數據庫來建立他們的推薦系統。他們可以快速分析客戶行為和不同產品之間的關系,以提供準確的推薦。
列存儲

(1) Cassandra: Apache Cassandra是一款高度可擴展且分布式的NoSQL數據庫,專為跨多個通用服務器處理大量數據而設計。它提供高可用性,沒有單點故障。Cassandra使用廣列存儲模型,允許以列的方式存儲數據,非常適合寫入密集的工作負載。
在廣列存儲中,寫入通常附加到數據文件的末尾,避免了昂貴的磁盤尋址,并使寫操作非常快。這對于寫入密集型工作負載,其中數據不斷流入數據庫,特別有益。
(2) HBase: Apache HBase是構建在Hadoop之上的列定向NoSQL數據庫。它旨在為大數據提供隨機、實時的讀/寫訪問。HBase非常適用于需要快速和隨機訪問大型數據集的工作負載,并且與Hadoop的MapReduce數據處理范例很好地集成。
(3) Cassandra/HBase(列存儲)
- 時間序列數據: Cassandra經常用于存儲時間序列數據,例如來自物聯網設備或股票價格數據的指標。其列向結構允許有效地寫入和讀取順序數據。Netflix使用Cassandra實時監控其流媒體服務。
- 大數據處理: HBase作為Hadoop生態系統的一部分,是處理大量數據的應用的理想選擇。像Facebook這樣的公司使用HBase存儲用戶消息和帖子。
文檔存儲

(1) CouchDB: Apache CouchDB是一款面向文檔的NoSQL數據庫,使用JSON表示文檔,使用JavaScript進行MapReduce查詢,使用HTTP進行API。CouchDB以其多主復制系統而聞名,這使得它成為離線和移動應用的不錯選擇。它還支持個別文檔更新的ACID屬性。
(2) CouchDB(文檔存儲):
- 離線優先應用: CouchDB的復制模型使其成為需要在離線狀態下工作,然后在網絡連接可用時同步的應用程序的良好選擇。例如,對于在偏遠地區工作的技術人員的現場服務應用程序可能使用CouchDB在本地存儲數據,然后在聯網時與中央數據庫同步。
- CouchDB具有內置的復制機制,可以在兩個數據庫實例之間同步數據。這意味著您可以在用戶設備上擁有數據庫的本地實例,并在服務器上擁有遠程實例。當設備脫機時,應用程序可以繼續從和寫入到本地數據庫。當設備重新聯機時,本地和遠程數據庫可以同步。
- CouchDB還具有內置的沖突解決機制。當數據庫的不同實例上以不同方式修改同一文檔時,CouchDB可以檢測到沖突,并允許應用程序以對特定用例有意義的方式解決沖突。
值得注意的是,有辦法使用AWS構建支持離線的應用程序。例如,您可以使用支持移動和Web應用程序的AWS AppSync,該服務支持離線數據訪問和同步。AppSync在設備重新聯機時自動同步數據。但這需要與使用CouchDB等文檔存儲相比,采用不同的架構和技術。
(3) 內容管理系統: CouchDB的靈活、無模式的模型非常適合內容管理系統,其中每個內容塊可以具有不同的屬性。
- 內容管理系統(CMS)通常涉及多種類型的內容,每種類型都有自己的屬性集。例如,博客文章可能具有標題、作者和正文等屬性,而產品列表可能具有價格、制造商和SKU等屬性。
- 在傳統的關系數據庫中,通常需要預先定義一個模式,指定每種內容類型可以具有哪些屬性。這可能不靈活,并且難以隨CMS需求的演變而更改。






















