拖輪的建議是正確的,並允許我增加一些觀點。
一個桶可以被認爲與RDMS世界中的「數據庫實例化」關係最密切(但並非完全)。在「數據庫」中將會有多個表/模式,並且這些都可以在一個桶中進行組合。
將存儲桶視爲所有共享一些常用配置參數(RAM配額,副本計數等)的數據的邏輯分組,並且只需要在需要控制某些數據集時將數據拆分爲多個存儲桶分別。其他原因與不同數據集的工作負載差異很大,或者需要分別跟蹤這些數據集的工作負載。
一些例子:
-I想控制緩存行爲的一組不同於其它數據。例如,許多客戶有一個「會話」存儲桶,他們總是想要RAM,而他們可能有一個更大的「用戶配置文件」存儲桶,它不需要RAM中緩存的所有數據。從技術上講,這兩個數據集可以駐留在一個存儲桶中,並允許Couchbase智能地將哪些數據保存在RAM中,但是您沒有太多保證或控制會話數據不會被推出......所以,它在自己的存儲桶中允許您執行該操作。它還使您能夠分別監控該流量的額外好處。
- 我想要一些數據被複制的次數比別人多。儘管我們通常在大多數羣集中只推薦一個副本,但有時我們的用戶會選擇某些他們想要額外複製的數據集。這可以通過單獨的桶進行控制。
- 同樣的問題,我只想將一些數據複製到另一個集羣/數據中心。這也是按照每個桶進行控制的,因此可以將數據拆分到單獨的存儲桶中。
- 當您在給定數據集的工作負載差異很大時(特別是在寫入數量上)差異很大時,從視圖/索引的角度來看,它確實有意義將數據分離到單獨的存儲桶中。我提到這是因爲這是真的,但我也想清楚,這不是常見的情況。在識別問題之後,您應該使用這種方法,而不是之前,因爲您認爲可能。
關於這最後一點,是的,每次寫入桶都會被索引引擎拾取,但通過使用JSON中的文檔類型,您可以非常快速地中止給定文檔的處理,而且它實際上不應該有對大量數據產生不利影響並不適用於某些觀點。如果你不介意的話,我特別好奇這些文檔的哪些部分是暗含的,因爲那肯定不是我們的意圖。
因此,一般來說,我們看到大多數部署的桶數很少(2-3),只有少數幾個5以上。我們的10個限制來自我們內部統計數據跟蹤的一些已知的CPU和磁盤IO開銷(負載或在桶中缺少這個無關緊要)。我們當然打算在未來的版本中減少這種開銷,但這仍然不會改變我們建議只有幾個桶的建議。無論如何,能夠將多個「模式」組合到單個邏輯分組中並應用視圖/索引的優勢仍然存在。
我們現在正在制定更具體的指導方針和尺寸建議(我寫這兩個博客作爲一個臨時差距,直到我們這樣做)。
作爲一種初始方法,您希望嘗試將設計文檔的數量保持在4左右,因爲默認情況下,我們最多並行處理4個。您可以增加此數字,但應該通過增加的CPU和磁盤IO容量來匹配。然後,您將希望保持每個文檔中的視圖數量相對較低,可能遠低於10,因爲它們都是以串行方式處理的。
我最近和一個擁有相當大的瀏覽量的用戶一起工作(大約有8個設計文檔和一些有近20個瀏覽量的dd),我們能夠通過將多個視圖組合成一個視圖來大幅降低這個問題。很明顯,這是非常依賴於應用程序的,但您應該嘗試從一個索引中生成多個不同的「查詢」。使用縮減,關鍵字前綴(視圖內)和排序規則,結合不同的範圍和分組查詢可以使單個索引開始擁擠,但實際上非常靈活。
您擁有的設計文檔和視圖越少,所需的磁盤空間,IO和CPU資源就越少。不幸的是,永遠不會有一個神奇的彈頭或難以對付的指引數字。最後,YMMV和測試您自己的數據集比我可以編寫的任何多頁響應更好;-)
希望有所幫助,請不要猶豫直接聯繫我們,如果您有特定的問題您不希望發佈的具體用例。
佩裏
非常好的如何分割桶的標準列表。謝謝。在處理單個存儲桶中的多種文檔類型時,會產生開銷,這一部分是http://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views-writing-bestpractice.html「使用文檔類型」部分: 「隨着時間的推移,這會給視圖構建過程增加很大的開銷。」和「從應用程序的角度來看,使用單獨的存儲桶可以更容易地爲對象和玩家使用」 – 2013-03-13 17:44:14
@ perry-krug關於優化將它們合併爲一個視圖的非常有趣的一點。任何教程/例子來展示一種可能的技術?謝謝。 – loretoparisi 2017-05-17 10:47:38