...小于 1 分钟
HBase 数据模型
HBase 是一个面向 列
的数据库管理系统,这里更为确切的而说,HBase 是一个面向 列族
的数据库管理系统。表 schema 仅定义列族,表具有多个列族,每个列族可以包含任意数量的列,列由多个单元格(cell)组成,单元格可以存储多个版本的数据,多个版本数据以时间戳进行区分。
HBase 逻辑存储结构
Table
:Table 由 Row 和 Column 组成。Row
:Row 是列族(Column Family)的集合。Row Key
:Row Key
是用来检索记录的主键。Row Key
是未解释的字节数组,所以理论上,任何数据都可以通过序列化表示成字符串或二进制,从而存为 HBase 的键值。- 表中的行,是按照
Row Key
的字典序进行排序。这里需要注意以下两点:- 因为字典序对 Int 排序的结果是 1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。如果你使用整型的字符串作为行键,那么为了保持整型的自然序,行键必须用 0 作左填充。
- 行的一次读写操作是原子性的 (不论一次读写多少列)。
- 所有对表的访问都要通过 Row Key,有以下三种方式:
- 通过指定的
Row Key
进行访问; - 通过
Row Key
的 range 进行访问,即访问指定范围内的行; - 进行全表扫描。
- 通过指定的
Column Family
:即列族。HBase 表中的每个列,都归属于某个列族。列族是表的 Schema 的一部分,所以列族需要在创建表时进行定义。- 一个表的列族必须作为表模式定义的一部分预先给出,但是新的列族成员可以随后按需加入。
- 同一个列族的所有成员具有相同的前缀,例如
info:format
,info:geo
都属于info
这个列族。
Column Qualifier
:列限定符。可以理解为是具体的列名,例如info:format
,info:geo
都属于info
这个列族,它们的列限定符分别是format
和geo
。列族和列限定符之间始终以冒号分隔。需要注意的是列限定符不是表 Schema 的一部分,你可以在插入数据的过程中动态创建列。Column
:HBase 中的列由列族和列限定符组成,由:
(冒号) 进行分隔,即一个完整的列名应该表述为列族名 :列限定符
。Cell
:Cell
是行,列族和列限定符的组合,并包含值和时间戳。HBase 中通过row key
和column
确定的为一个存储单元称为Cell
,你可以等价理解为关系型数据库中由指定行和指定列确定的一个单元格,但不同的是 HBase 中的一个单元格是由多个版本的数据组成的,每个版本的数据用时间戳进行区分。Cell
由行和列的坐标交叉决定,是有版本的。默认情况下,版本号是自动分配的,为 HBase 插入Cell
时的时间戳。Cell
的内容是未解释的字节数组。
Timestamp
:Cell
的版本通过时间戳来索引,时间戳的类型是 64 位整型,时间戳可以由 HBase 在数据写入时自动赋值,也可以由客户显式指定。每个Cell
中,不同版本的数据按照时间戳倒序排列,即最新的数据排在最前面。
...大约 5 分钟
HBase 快速入门
HBase 简介
为什么需要 HBase
在介绍 HBase 之前,我们不妨先了解一下为什么需要 HBase,或者说 HBase 是为了达到什么目的而产生。
在 HBase 诞生之前,Hadoop 可以通过 HDFS 来存储结构化、半结构甚至非结构化的数据,它是传统数据库的补充,是海量数据存储的最佳方法,它针对大文件的存储,批量访问和流式访问都做了优化,同时也通过多副本解决了容灾问题。
Hadoop 的缺陷在于:它只能执行批处理,并且只能以顺序方式访问数据。这意味着即使是最简单的工作,也必须搜索整个数据集,即:Hadoop 无法实现对数据的随机访问。实现数据的随机访问是传统的关系型数据库所擅长的,但它们却不能用于海量数据的存储。在这种情况下,必须有一种新的方案来同时解决海量数据存储和随机访问的问题,HBase 就是其中之一 (HBase,Cassandra,couchDB,Dynamo 和 MongoDB 都能存储海量数据并支持随机访问)。
...大约 9 分钟
Cassandra
Apache Cassandra 是一个高度可扩展的分区行存储。行被组织成具有所需主键的表。
最新版本:v4.0
Quick Start
安装
先决条件
- JDK8+
- Python 2.7
简介
Apache Cassandra 是一套开源分布式 Key-Value 存储系统。它最初由 Facebook 开发,用于储存特别大的数据。
...大约 2 分钟