数据模型特殊属性
Rowkey、Column(列族和列)、Version 组合在一起称为 HBase 中的一个单元格。有可能会有很多单元格的 行和列 是相同的,要区分不同的单元格可以使用版本。
如果有多个版本的写操作同时发起,HBase 都会保存
可以发起包含版本的写操作
Delete
内部删除标记三种不同类型。
Delete : 删除列指定的版本。
Delete Column :删除列的所有版本。
Delete Family :删除特定列族所有列。
删除操作是建立一个墓碑标记。如果标记最新一个版本,那么所有版本都会被删除。
现有版本的Detele限制
删除标记将会将时间点之前所有的数据都建立墓碑,当还未发生主合并时,及时 PUT 一条时间点之前的数据 也是 GET 不到的。 只有在主合并发生后,才会恢复正常。所以正常的时间戳就不会发生该问题
一个Cell有3个版本数据 T1,T2,T3 maxVersion设置位2, 当请求获取全部版本的时候 会返回两个 t2 和 t3。 如果将 t2 和 t3 删除 那么就会返回 t1 。 但是如果在删除之前发生了 major compaction 操作, t1 的值将会从磁盘上 被彻底删除, 结果是什么值都不会返回了。
列的元数据
对于 HBase 表中的列族,除了 KeyValue 实例以外,没有别的元数据描述,KeyValue 对象表示 HBase 最小单位 Cell
HBase 连接查询
1 写入 HBase 时候就已经做好连接。
2 查询表并在应用层实现连接。
HBase 是行级锁,永远不会出现数据不一致情况 比如put 1,1,1 ,然后 put 2 2 2 就一定是 1 1 1 或者 2 2 2 绝不会出现 1 2 1等情况
HBase 自动分区
HBase 中的一个表的数据会被分成很多的 Region, Region 可以动态扩展并且 HBase 保证 Region 的负载均衡。 Region 实际上是行键排序后的按规则分割的连续的存储空间。 如果 Region 太大。会被动态拆分,相反,多个 Region 会合并成一个较大的 Region, 以减少 HDFS 上存储文件的数量。 这两个过程就是 HBase 的 split 和 compaction。
CAP 原理与最终一致性
一致性(Consistency) :所有节点在同一时间具有相同的数据。
可用性(Availability) : 保证每个请求不管成功或者失败都有相应。
分区容忍性(Partition tolerance):系统中任意信息的丢失或失败不影响系统继续运作。
分布式数据库系统也只能满足3项中的两项。而由于当前网络硬件问题一定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。因此只能在一致性可可用性之间进行权衡,大多数的分布式数据库系统选择牺牲一致性提升高可用性
关系型数据库 Mysql、SQL Server、Postgres A,C
非关系型数据库 Google BigTable:MongoDB、 HBase、Redis
小结:
HBase作为 NoSQL 数据库的一个代表。 更多的是为了扩展性和性能考虑,弱化了事务性。 学习的时候需要用一个全新的思维方式去认识HBase
HBase 计数器 和 计数器代码实现 很简单的小实现
God has given me a gift. Only one. I am the most complete fighter in the world. My whole life, I have trained. I must prove I am worthy of someting. rocky_24