2016-03-07 103 views

回答

1

Couchbase將數據存儲在磁盤和RAM中。默認行爲是將文檔存儲在RAM中後,在某個任意時間(通常很快)將文檔寫入磁盤。這留下了一個短暫的窗口,其中節點故障可能導致數據丟失。我在Couchbase的當前版本的文檔中找不到任何內容,但過去一直是您可以請求「set」方法,只有在數據保存到磁盤後才能完成(默認爲僅限RAM)。

在任何情況下,寫入RAM後,文檔最終都會寫入磁盤。 Couchbase保留一個disk write queue,您可以在管理控制檯的度量報告頁面上檢查它。現在,CB確實跨羣集同步寫入,並且我相信在Couchbase確認寫入發生之前(例如在寫入方法返回給調用者之前),寫入將在羣集中同步。此外,文檔很難確定,因爲之前的版本文檔更加詳細。

如果您的文檔多於可用內存,則只有最常訪問的文檔纔會存儲在內存中以便快速檢索,其他所有文檔都會被逐出磁盤。

+0

Couchbase在「任意時間」不會寫入磁盤。它以儘可能快的速度寫入磁盤。是的,有一些操作系統級別的磁盤隊列,但這是不可避免的。此外,Couchbase不只是將數據寫入RAM,而是寫入一個託管緩存。具體來說,它使用混合memcached爲此。除此之外還有更多,但你明白了。 – Kirk

+0

@Kirk - 謝謝你的澄清 - 要清楚,「任意」這個詞在數學意義上是指「非確定性的或未指定的」,而不是沒有邏輯。是的,當它使用memcached時,其要點是數據存儲在RAM中,而不是在較慢的物理介質上。 – theMayer

2

Couchbase架構是內存第一\ Cache通過。 您無法決定是否使用內存,並且儘快將數據寫入磁盤。 部分原因是您需要有足夠的內存來存儲您擁有的數據量。

你確實有一些策略,如完全或價值驅逐,但你又沒有控制權。

但是你可以做的是在SDK中等待,直到數據被複制\持久化到磁盤。

+0

感謝Roi。例如,如果我擁有100 GB的內存,那麼在將內存刷新到磁盤之前,數據是否保留在內存中直到達到100 GB的限制? –

+1

不完全。 存在什麼叫做高水位(假設存儲桶分配的內存的80%),在達到它之後,根據驅逐策略,完整文檔(元數據)被驅逐或者只是數據。 –

+0

再次感謝Roi! –