2012-07-16 101 views

回答

0

memstore保存更新,就像HFile一樣,但它只會根據表的配置寫入磁盤(例如,如果您已將表設置爲僅保存一行版本,則只寫入最新的行到磁盤)。

還有的的memstore如何工作here

1

沒有一個很好的解釋,也不會刪除&取代現有的記錄。它會將新的鍵值(記錄數據)附加到memstore。 第一個原因:它可能被配置爲保留一個以上版本的單元格(列)值。但即使memstore中單元格的版本比配置爲保留更多版本,它仍會追加記錄而不是覆蓋它(或刪除最舊的)。

但是,請注意,在更新版本的HBase(0.92+)中,存在一個對memstore刷新過程的優化:它可能跳過(不寫入HFiles)太舊的單元版本(即不應該包含在最大數量的版本中)。更多關於這裏:HBASE-4241。 雖然它看起來像「覆蓋」Memstore中的現有值(至少從外部的角度來看),但它並不完全是這樣做的。這種優化僅在memstore刷新時發生,因此不會影響memstore大小:寫入新值時,它們始終附加。即這種優化不會導致更少發生刷新。

這裏有一個與優化有關的正在進行的工作,所以請留意下一個版本。

是的,正如Richard提到的,您可以瞭解更多關於配置HBase Memstore here的信息。

+0

這是很好的解釋!順便說一句,如你所說,habse源代碼的哪一部分正在維護memstore?請指出,如果可能的話。 – Richard 2012-07-25 19:56:06

+0

我想你要找的是org.apache.hadoop.hbase.regionserver.MemStore – 2012-07-25 21:23:29