文档章节

HBase 优化,columnFamily和qualifierColumn的设计原则

爱运动的小乌龟
 爱运动的小乌龟
发布于 2017/06/21 23:07
字数 705
阅读 433
收藏 0

一、把一个传统的关系型数据库中的数据映射到hbase,从性能的角度如何优化ColumnFamily和qualifierColumn.

二、两个比较极端的情况,(1)关系型数据库中的每一列对应一个columnFamily,(2)关系型数据库中一张表对应一个columnFamily。

三、从读的角度分析性能

(1)如果columnFamily越多,读取一个cell的速度优势是比较明显的,因为找到这个columnfamily,就等于找了column及其对应的值;

(2)如果一张表对应一个columnfamily,找到对应的rowkey后,要把columnfamily对应的多列值都读取到,这样磁盘io和网络消耗的都比较多,速度会慢些。

(3)如果某些列是经常要一起读取的,把这些归到一个columnfamily后面,一次请求就可以获取这些列,比分多次请求获取效率要高。

四、从写的角度分析性能

(1)从regionserver内存消耗角度,根据hbase特点,一个columnfamily对应一个HStore,而每一个Hstore都有一个自己的memstore,如果columnfamily太多,对regionserver的内存消耗就很大。

(2)从flush和compaction角度,目前hbase的flush和compaction都是以region为单位(虽然触发这个动作的条件有多个),如果columnfamily太多,很容易触发flush操作,对于很多memstore中的数据量可能还很少,这样flush就会产生大量小文件,而大量的小文件(即storefile)就会触发compaction操作,频繁的这样操作,会降低集群的性能。

(3)从split角度分析,storefile是以columnfamily为单位的,大量的columnfamily可以减少split的发生,但这是一把双刃剑;因为的更少的split会导致部分region过于偏大,而regionserver之间进行balance时按region的数量进行负载均衡而不是按region的大小,这样可能就会导致balance失效。从好的一方面来看,更少的split会让集群运行的更稳定,然后选择在集群空闲或压力小的时候手动执行split和balance。

(4)因此对于写部分,一般离线集群,一张表使用一个columnfamily即可,对于在线集群,可以根据情况合理分配columnfamily个数。

补充:目前我们的集群是在线集群,我们有一张在线使用表存储了很多数据,经过综合考虑只设计了一个columnfamily,主要考虑到,对于这个表中数据,每天查询量可以打三千万左右次,而表中每天新增数据只有几十G,这样设计可以减少split和flush的操作,让集群更多的时间处在稳定运行状态,这样有利于查询。

© 著作权归作者所有

共有 人打赏支持
爱运动的小乌龟
粉丝 2
博文 147
码字总数 41882
作品 0
朝阳
私信 提问
HBase中CloumnFamily的设计规则

为什么要这样子做呢? HBase本身的设计目标是支持稀疏表,而稀疏表通常会有很多列,但是每一行有值的列又比较少。 如果不使用Column Family的概念,那么有两种设计方案: 1.把所有列的数据放...

hanzhankang
2014/02/14
0
0
Hbase Schema 设计注意事项及最佳实践总结

一个列族的所有列在硬盘上存放在一起,使用这个特性可以把不同访问模式的列放在不同列族,以便隔离它们。这也是HBase被称为面向列族的存储(column-family-oriented store)的原因。 1、RowKe...

PeakFang-BOK
10/21
0
0
大数据架构-使用HBase和Solr将存储与索引放在不同的机器上

摘要: HBase可以通过协处理器 Coprocessor 的 方式向Solr发出请求,Solr对于接收到的数据可以做相关的同步:增、删、改索引的操作,这样就可以同时使用HBase存储量大和Solr检索性能高的优点...

miscellanea
2015/08/24
0
0
Hbase原理以及基本运行方式和优化

HBase是一个构建在HDFS上的分布式列存储系统; HBase是基于Google BigTable模型开发的,典型的key/value系统; HBase是Apache Hadoop生态系统中的重要一员,主要用于海量非结构化数据存储; ...

脸大的都是胖纸
2015/07/06
0
0
NoSQL-Column-HBase数据模型

RDBS是行数据库,数据是按表一行一行进行存储的。HBase是列数据库,存储是按列来存储的(准确点应该是按照列簇来存储的)。谈到列库就不得不说Google的BigTable,HBase的数据模型和BigTable的...

开源中国驻成都办事处
2013/06/21
0
2

没有更多内容

加载失败,请刷新页面

加载更多

中国龙-扬科
31分钟前
2
0
使用vuex的state状态对象的5种方式

vuex是一个专门为vue.js设计的状态管理模式,并且也可以使用devtools进行调试。 下面给大家来贴一下我的vuex的结构 下面是store文件夹下的state.js和index.js内容 //state.jsconst state =...

peakedness丶
34分钟前
2
0
NetCore MVC Demo

地址:http://114.116.9.72:5411

whltian
41分钟前
3
0
Netty handle方法周期 (四)

写了一个练习之后,发现自定义的助手类每次肯定是必须的,对于不同的业务逻辑需求,会写相对应的逻辑 最简单的查看Handle生命周期的方式,就是重写上级方法,看名字差不多应该可以知道方法的作用 ...

_大侠__
46分钟前
9
0
vue主动刷新页面及列表数据删除后的刷新实例

1.场景 在处理列表时,常常有删除一条数据或者新增数据之后需要重新刷新当前页面的需求。 2.遇到的问题 1. 用vue-router重新路由到当前页面,页面是不进行刷新的 2.采用window.reload(),或者...

前端小攻略
57分钟前
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部