天天看點

《HBase實戰》一2.7 原子操作

本節書摘來異步社群《hbase實戰》一書中的第2章,第2.7節,作者: 【美】nick dimiduk , amandeep khurana 譯者: 謝磊 責編: 楊海玲,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

hbase實戰

hbase操作庫裡的最後一個指令是列值遞增(increment column value)。它有兩種使用方式,像其他指令那樣使用increment指令對象,或者作為htableinterface的一個方法來使用。我們使用htableinterface的方式,因為語義更直覺。我們使用它來儲存每個使用者釋出推帖的總數,如下所示:

《HBase實戰》一2.7 原子操作

該指令不用先讀出hbase單元就可以改變存儲其中的值。資料操作發生在hbase伺服器上,而不是在你的用戶端,是以速度快。當其他用戶端也在通路同一個單元時,這樣避免了出現紊亂狀态。你可以把icv(increment column value)等同于java的atomiclong.addandget()方法。遞增值可以是任何java``long類型值,無論正負。我們将在下一節深入讨論原子性操作。

也請注意這個資料不是存儲在twits表而是users表中。存在users表的原因是不希望這個資訊成為掃描的一部分。存在twits表裡會讓常用的通路模式很不友善。

就像java的原子類族,htableinterface也提供checkandput()和check<code></code>anddelete()方法。它們可以在維持原子語義的同時提供更精細地控制。你可以用checkandput()來實作incrementcolumnvalue()方法:

《HBase實戰》一2.7 原子操作

該實作有點長,但可以試試。使用checkanddelete()的方式與此類似。

按照和前面相同的方式,你可以輕松地建立twitstool表。模型、dao和指令行實作和前面users表的情況類似。本書附帶的源代碼提供了一個實作。