文档章节

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

爱运动的小乌龟
 爱运动的小乌龟
发布于 2017/06/21 23:07
字数 705
阅读 718
收藏 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的操作,让集群更多的时间处在稳定运行状态,这样有利于查询。

© 著作权归作者所有

爱运动的小乌龟
粉丝 3
博文 149
码字总数 43760
作品 0
朝阳
私信 提问
HBase中CloumnFamily的设计规则

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

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

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

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

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

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

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

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

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

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

没有更多内容

加载失败,请刷新页面

加载更多

maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
今天
8
0
Linux创建yum仓库

第一步、搞定自己的光盘 #创建文件夹 mkdir -p /media/cdrom #挂载光盘 mount /dev/cdrom /media/cdrom #编辑配置文件使其永久生效 vim /etc/fstab 第二步,编辑yun源 vim /ect yum.repos.d...

究极小怪兽zzz
今天
6
0
jar 更新部分文件

C:\Program Files (x86)\Java\jdk1.8.0_102\bin>jar -hIllegal option: hUsage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...Options: -c c......

圣洁之子
今天
9
0
OSChina 周六乱弹 —— 感谢女装红薯开办了这个网站

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @胖达panda:分享歌词: 我有一只小毛驴我从来也不骑,有一天我心血来潮骑着去赶集,我手里拿着小皮鞭我心里正得意,不知怎么哗啦啦,我摔了一...

小小编辑
今天
2.6K
13
DDD(四)

1,引言 软件开发者大多趋向于将关注点放在数据上,而不是领域上。这对于刚入门的DDD的新手而言也是如此。以我目前的思考方式,数据库依然占据主要的地位。开发一个功能,首先我就会考虑我会...

MrYuZixian
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部