《HBase实战》一2.7 原子操作

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

《HBase实战》一2.7 原子操作的相关文章

《HBase实战》一导读

前 言 HBase实战 2008年秋季我开始和HBase结缘,当时它还是一个新生项目,一年前刚刚发布.早期版本出来时,HBase表现很不错,但是也不是没有令人尴尬的缺陷.HBase项目当时有近10个软件Commiffer,作为一个Apache子项目还算不错.接下来是NoSQL宣传的高潮.当时专有名词NoSQL还没有出现,但是随后的一年这个术语变成了通俗用语.没有人能够说清楚为什么NoSQL重要,只知道它就是重要,反正数据领域开源社区的每个人都对这个概念很着迷.社区中有两种声音,有人批评关系型数据

《HBase实战》一第一部分 HBase基础

第一部分 HBase基础 HBase实战 本书前三章介绍HBase的基本原理.第1章大体上回顾一下数据库技术的演变,并介绍HBase出现的特定背景. 第2章通过建立一个应用示例--TwitBase来讲授HBase的基础知识.通过这个示例,你可以学习如何访问HBase以及如何设计HBase的模式(schema),你会简单地了解到在应用系统中如何有效使用HBase. HBase是一种分布式系统,我们在第3章会探讨分布式架构.你将学习到HBase如何在集群中管理你的数据以及如何使用MapReduce访

《HBase实战》一2.5 数据模型

2.5 数据模型 HBase实战正如你看到的那样,HBase进行数据建模的方式和你熟悉的关系型数据库有些不同.关系型数据库围绕表.列和数据类型--数据的形态使用严格的规则.遵守这些严格规则的数据称为结构化数据.HBase设计上没有严格形态的数据.数据记录可能包含不一致的列.不确定大小等.这种数据称为半结构化数据(semistructured data). 在逻辑模型里针对结构化或半结构化数据的导向影响了数据系统物理模型的设计.关系型数据库假定表中的记录都是结构化的和高度有规律的.因此,在物理实现

《HBase实战》一2.8 ACID语义

2.8 ACID语义 HBase实战如果使用过数据库系统,你会听说过各种数据库系统提供的ACID语义.ACID是当你搭建使用数据库系统做存储的应用系统时需要掌握的一组要素.当应用系统访问承载它的数据库时,遵循这些要素可以使应用系统的行为更加合理.为简单起见,让我们再次定义ACID.记住,ACID不同于之前我们简要介绍过的CAP. Atomicity(原子性)- 原子性是指原子不可分的操作属性,换句话说,要么全部完成,要么全部不完成.如果操作成功,整个操作成功.如果操作失败,整个操作失败,系统会回

《HBase实战》一2.3 数据坐标

2.3 数据坐标 HBase实战在逻辑数据模型里,时间版本的数字也是数据的坐标之一.你可以想象,在关系型数据库里存储数据使用的是二维坐标系统,先是行后是列.照此类推,HBase在表里存储数据使用的是四维坐标系统. HBase使用的坐标依次是行键.列族.列限定符和时间版本.users表的坐标如图2-4所示. 当使用HBase API检索数据时,你不需要提供全部坐标.如果你在Get命令中省略了时间版本,HBase返回数据值多个时间版本的映射集合.HBase允许你在一次操作中得到多个数据,它们按照坐标

《HBase实战》一2.4 小结

2.4 小结 HBase实战现在知道了如何访问HBase,让我们在一个实际例子中练习已经学到的东西.首先为User实例定义一个简单模型对象,如代码清单2-1所示. 代码清单2-1 User的数据模型 然后在一个类中封装所有HBase访问操作.先声明普遍使用的字节数组byte[]常量,然后定义封装操作命令的方法,接下来是User模型的公有接口和私有实现,如代码清单2-2所示. 代码清单2-2 在UsersDAO.java里的CRUD操作 声明一次常用的 字节数组常量 省略导入细节 让调用环境来管理

《HBase实战》一2.6 表扫描

2.6 表扫描 HBase实战你可能发现,没有查询(query)命令.到目前为止,你都找不到这样的命令.查找包含某个特定值的记录的唯一办法是,使用扫描(Scan)命令读出表的某些部分,然后再使用过滤器(filter)来得到有关记录.可以想到,扫描返回的记录是排好序的.HBase设计上支持这种方式,因此速度很快. 要扫描得到整个表的内容,单独使用Scan构造函数即可: 但是,你经常只对整张表的一个子集感兴趣.比如,你想得到所有以字母T开头的ID的用户.给Scan构造函数增加起始行和结束行的信息即可

《MapReduce 2.0源码分析与编程实战》一1.2 HBase使用场景和成功案例

1.2 HBase使用场景和成功案例 HBase实战有时候了解软件产品的最好方法是看看它是怎么用的.它可以解决什么问题和这些解决方案如何适用于大型应用架构,这些能够告诉你很多.因为HBase有许多公开的产品部署案例,我们正好可以这么做.本节将详细介绍一些成功使用HBase的使用场景. 注意不要自我限制,认为HBase只能在这些使用场景下使用.它是一个很新的技术,根据使用场景进行的创新正推动着该系统的发展.如果你有新想法,认为HBase提供的功能会让你受益,那就试试吧.社区很乐于帮助你,也会从你的

《MapReduce 2.0源码分析与编程实战》一第1章 HBase介绍

第1章 HBase介绍 HBase实战本章涵盖的内容 Hadoop.HBase和NoSQL的起源 HBase的常见使用场景 HBase的基本安装 使用HBase存储和查询数据 HBase 是一种数据库:Hadoop数据库.它经常被描述为一种稀疏的.分布式的.持久化的.多维有序映射,它基于行键(rowkey).列键(column key)和时间戳(timestamp)建立索引.人们会说它是一种键值(key value)存储.面向列族的数据库,有时也是一种存储多时间戳版本映射的数据库.所有这些描述都