文档章节

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

爱运动的小乌龟
 爱运动的小乌龟
发布于 2017/06/21 23:07
字数 705
阅读 329
收藏 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
博文 146
码字总数 41455
作品 0
朝阳
HBase中CloumnFamily的设计规则

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

hanzhankang
2014/02/14
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
Hbase 中Column Family 的作用

HBase本身的设计目标是支持稀疏表,而稀疏表通常会有很多列,但是每一行有值的列又比较少。 如果不使用Column Family的概念,那么有两种设计方案: 1.把所有列的数据放在一个文件中(也就是传...

为了美好的明天
04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Web系统大规模并发:电商秒杀与抢购

一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常...

xtof
今天
1
0
代码质量管理平台-sonarqube

在工作中,往往开发的时候会不怎么注重代码质量的人很多,存在着很多的漏洞和隐患等问题,sonarqube可以进行代码质量的审核,而且十分的残酷。。。。。接下来我们说下怎么安装 进入官网下载:...

落叶清风
今天
6
0
在Ubuntu安装和配置Sphinx

Ubuntu系统默认是配置有sphinx的,先检查一下,别多此一举。。。。。 在开始本指南之前,您需要: 一个Ubuntu 16.04服务器。 sudo的一个非root用户,您可以通过以下设置本教程 。 安装在服务...

阿锋zxf
今天
1
0
Qt编写输入法V2018超级终结版

对于qt嵌入式linux开发人员来说,输入法一直是个鸡肋问题,要么不支持实体键盘同步,要么不能汉字输入,要么不支持网页输入等,这几年通过陆续接触大量的各种输入法应用场景客户,得到真实需...

飞扬青云
今天
2
0
TypeScript基础入门之高级类型的多态的 this类型

转发 TypeScript基础入门之高级类型的多态的 this类型 高级类型 多态的this类型 多态的this类型表示的是某个包含类或接口的子类型。 这被称做F-bounded多态性。 它能很容易的表现连贯接口间的...

durban
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部