您的位置:首页 > 数据库

HBase数据库与关系型数据库的区别(取材于官方文档)

2016-01-27 19:34 323 查看
HBase 数据被建模为多维映射,其中值(表单元)通过 4 个键索引:

value = Map(TableName, RowKey, ColumnKey, Timestamp)

其中:

TableName 是一个字符串。 是表名。

RowKey 和 ColumnKey 是二进制值(Java 类型 byte[])。 代表行健和列族。

Timestamp 是一个 64 位整数(Java 类型 long)。

value 是一个未解释的字节数组(Java™ 类型 byte[])。

二进制数据被编码为 Base64,以便通过网络传输。

行键是表的主键,通常是一个字符串。行通过行键按字典顺序排序。

存储在表中的信息的结构为列族(column family,就相当于列名),您可以将这种结构视为类别。每个列族可以拥有任意数量的成员,它们通过标签(或修饰符)识别。column 键(就是每列的值)由族名、:号和标签组成。例如,对于系列name 和成员 first,列键为 name: first。

(这里不是很好理解,看了下面的图可能就比较容易理解了,这个跟数据库有区分,可见,这里一行,不代表就一组数据,往往是多组数据的,一个rowkey可能对应多列的值,而每列的值(可以视为columnkey)是由列族名:标签组成),又如,name:last也是一个成员,他们都在于00001行键上,是00001行键的成员,成员值,就是value。

一个 HBase 表模式定义多个列族,但当您向表中插入一行时,应用程序能够在运行时创建新成员。对于一个列族,表中的不同行可以拥有不同数量的成员。换句话说,HBase 支持一个动态模式 模型。

参考下图更好理解

其实这些记录在hbase是根据TimeStamp排序的,所以这虽然上图看起来很工整,但是实际上载数据库里存放是凌乱的。000001和000002的成员交错着放,唯一定义一个成员的唯一值的行键+列族:标签。

以第一个成员为例:

000001是行键,列族是name和contact,列键(column键)是name:first 和name:last和contact:http ,Value值就是Jeffrey和Dean,还有research.google.com/people/jeff….

对于任意行,一次只能访问一个列族的一个成员(这与关系数据库不同,在关系数据库中,一个查询可以访问来自一个行中的多个列的单元)。您可以将一个行中的一个列族的成员视为子行。(这个是因为一行可以对应多组成员所定,跟数据库最大的不同在于此吧)

表被分解为多个表区域,等同于 Bigtable 片(tablet)。一个区域包含某个范围中的行。将一个表分解为多个区域是高效处理大型表的关键机制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: