2.7 原子操作
HBase实战
HBase操作库里的最后一个命令是列值递增(Increment Column Value)。它有两种使用方式,像其他命令那样使用Increment命令对象,或者作为HTableInterface的一个方法来使用。我们使用HTableInterface的方式,因为语义更直观。我们使用它来保存每个用户发布推帖的总数,如下所示:
该命令不用先读出HBase单元就可以改变存储其中的值。数据操作发生在HBase服务器上,而不是在你的客户端,所以速度快。当其他客户端也在访问同一个单元时,这样避免了出现紊乱状态。你可以把ICV(Increment Column Value)等同于Java的AtomicLong.addAndGet()方法。递增值可以是任何Java``Long类型值,无论正负。我们将在下一节深入讨论原子性操作。
也请注意这个数据不是存储在twits表而是users表中。存在users表的原因是不希望这个信息成为扫描的一部分。存在twits表里会让常用的访问模式很不方便。
就像Java的原子类族,HTableInterface也提供checkAndPut()和check
AndDelete()方法。它们可以在维持原子语义的同时提供更精细地控制。你可以用checkAndPut()来实现incrementColumnValue()方法:
该实现有点长,但可以试试。使用checkAndDelete()的方式与此类似。
按照和前面相同的方式,你可以轻松地新建TwitsTool表。模型、DAO和命令行实现和前面users表的情况类似。本书附带的源代码提供了一个实现。
时间: 2024-09-02 15:14:25