CouchDB 是如何工作的?
CouchDB 構建在強大的 B-樹儲存引擎之上。這種引擎負責對 CouchDB 中的數據進行排序,并提供一種能夠在對數均攤時間內執行搜索、插入和刪除操作的機制。CouchDB 將這個引擎用于所有內部數據、文檔和視圖。
因為 CouchDB 數據庫的結構獨立于模式,所以它依賴于使用視圖創建文檔之間的任意關系,以及提供聚合和報告特性。使用 Map/Reduce 計算這些視圖的結果,Map/Reduce 是一種使用分布式計算來處理和生成大型數據集的模型。Map/Reduce 模型由 Google 引入,可分為 Map 和 Reduce 兩個步驟。在 Map 步驟中,由主節點接收文檔并將問題劃分為多個子問題。然后將這些子問題發布給工作節點,由它處理后再將結果返回給主節點。在 Reduce 步驟,主節點接收來自工作節點的結果并合并它們,以獲得能夠解決初問題的總體結果和答案。
CouchDB 中的 Map/Reduce 特性生成鍵/值對,CouchDB 將它們插入到 B-樹引擎中并根據它們的鍵進行排序。這能通過鍵進行高效查找,并且提高 B-樹中的操作的性能。此外,這還意味著可以在多個節點上對數據進行分區,而不需要單獨查詢每個節點。
傳統的關系數據庫管理系統有時使用鎖來管理并發性,從而防止其他客戶機訪問某個客戶機正在更新的數據。這防止多個客戶機同時更改相同的數據,但對于多個客戶機同時使用一個系統的情況,數據庫在確定哪個客戶機應該接收鎖并維護鎖隊列的次序時會遇到困難,這很常見。在 CouchDB 中沒有鎖機制,它使用的是多版本并發性控制(Multiversion concurrency controlMVCC)— 它向每個客戶機提供數據庫的新版本的快照。這意味著在提交事務之前,其他用戶不能看到更改。許多現代數據庫開始從鎖機制前移到 MVCC,包括 Oracle(V7 之后)和 Microsoft® SQL Server 2005 及更新版本。