数据模型传统的关系型数据库,一张表(table)由行(row)和列(column)组成 。相对Hbase分布式数据库却有所差别,可以把Hbase中的表理解成不同维度Map的集合 。包含以下主要概念 。
- table
hbase数据库中的表 。 - row
hbase数据库表中的行 。一张表包含多行 。每一行由row key和一个或多个column的值组成 。row key按字母表顺序排序存储 。在设计表的row key时,推荐按业务含义把相近的内容放到一起,这样可以有效地提高查询效率 。比如:一张表的row key为domain(域名)时,对应row key值最好设计成域名的倒叙值(如:org.Apache.www, org.apache.mail, org.apache.jira),hbase存储时就可以把相同根域名的值放到同一块存储区域中,查询起来更快 。row key不宜设计过大,hbase中每个值都会保存相关keys (row key, family qualifier, and timestamp) 。
- column
hbase数据库表中的列 。列由列族(column family)和列修饰符(column qualifier)构成 。两者通过':'符号分隔 。
- column family
框架性能方面的考虑,列族在物理上是多个列以及列中的相应值的集合 。列族中还会存储一些基础的元数据,比如当前列族内容是否需要缓存在内存中,row key编码规则,数据压缩方式等 。一张hbase表中的列族不宜过多,一般建议不超过3个,过多时在数据块压缩调整时会导致相互影响,从而影响性能 。
- column qualifier
列修饰符被加入到某个列族中,并在列族中提供索引关联列修饰符中的值 。如:列族content中的html修饰符,表示content:html;另一个修饰符pdf,则表示content:pdf 。
- cell
一个单元对应表中一行(row)中列族(column family)下某个列修饰符(column qualifier)的值,包含具体值和时间戳(timestamp),其中时间戳用来标识当前值所属的版本(version) 。
- timestamp
cell值被写入时,附带会写入相应的timestamp时间,作为该值的一个版本信息 。timestamp默认取当前RegionServer服务机器上的时间,当然你也可以自行指定时间值 。
文章插图
将以上表格转换成json格式
文章插图
通过以上图示,可以了解:
一个row key具有多个版本的数据,不同版本通过不同的timestamp定义 。
一个column family可以有多个column qualifier 。
row key下的column family可以为空 。
一个row key多版本数据按版本号时间倒序排列 。当查询条件不带版本号时,以倒叙顺序依次从上往下查找 。如:rowkey="com.cnn.www",列族=contents:html,返回值t6版本的值 。
NOSQL特性hbase是一个nosql数据库,相较于RDBMS,它不支持传统关系型数据库的typed columns(列类型), secondary indexes(二级索引), triggers(触发器), and advanced query languages(高级查询语言)等特性 。它的长处在数据存储,是真正意义上的分布式数据库 。通过添加RegionServer机器,即可实现hbase的线性和模块化扩展 。
Hbase具有以下特性:
- Strongly consistent reads/writes: HBase is not an "eventually consistent" DataStore. This makes it very suitable for tasks such as high-speed counter aggregation.(强一致读写,非最终一致性数据存储,这使得特别适合高速的count聚合运算场景) 。
- Automatic sharding: HBase tables are distributed on the cluster via regions, and regions are automatically split and re-distributed as your data grows.(自动分片:HBase表通过regions分布到集群的不同机器上,随着数据增长,regions会自动分裂和重新分配集群机器资源)
- Automatic RegionServer failover(自动RegionServer故障切换)
- Hadoop/HDFS Integration: HBase supports HDFS out of the box as its distributed file system.(支持Hadoop和HDFS集成)
- MapReduce: HBase supports massively parallelized processing via MapReduce for using HBase as both source and sink.(支持MapReduce计算框架)
- JAVA Client API: HBase supports an easy to use Java API for programmatic access.(友好的java API集成)
- Thrift/REST API: HBase also supports Thrift and REST for non-Java front-ends.(友好的Thrift/REST API集成)
- Block Cache and Bloom Filters: HBase supports a Block Cache and Bloom Filters for high volume query optimization.(大容量查询优化,设计了块缓存和布隆过滤)
- Operational Management: HBase provides build-in web-pages for operational insight as well as JMX metrics.(内置可视化界面操作工具)
推荐阅读
- SpringBoot如何用Session共享实现分布式部署?
- 微信后台开发工程师:微信研发体系下的分布式配置系统设计概要
- 聊聊大益的熟茶系列,大益普洱老茶头602批
- 聊聊傣家三味茶,今天你喝对茶了吗
- 什么是HBase?它是怎样工作的?终于有人讲明白了
- 前端杂谈:浅聊GMS
- 面向AI应用分布式执行框架
- 网线也有高低?聊聊网线的差别
- 全新架构的 Hmily 分布式事务框架 2.1.1发布
- 缓存只会用!缓存架构没听过?分布式多级缓存大瓶装,你拎包带走