Table中Family和Qualifier的关系与区别

就像用MySQL一样,我们要做的是表设计,MySQL中的表,行,列的在HBase已经有所区别了,在HBase中主要是Table和Family和Qualifier,这三个概念。

Table可以直接理解为表,而Family和Qualifier其实都可以理解为列,

一个Family下面可以有多个Qualifier,所以可以简单的理解为,

HBase中的列是二级列,也就是说Family是第一级列,Qualifier是第二级列。两个是父子关系。

谈谈Table中Family和Qualifier的设置
对于传统关系型数据库中的一张table,在业务转换到hbase上建模时,从性能的角度应该如何设置family和qualifier呢?
最极端的,可以每一列都设置成一个family,也可以只有一个family,但所有列都是其中的一个qualifier,那么有什么区别呢?
family越多,那么获取每一个cell数据的优势越明显,因为io和网络都减少了,而如果只有一个family,那么每一次读都会读取当前rowkey的所有数据,网络和io上会有一些损失。
当然如果要获取的是固定的几列数据,那么把这几列写到一个family中比分别设置family要更好,因为只需一次请求就能拿回所有数据。
以上是从读的方面来考虑的,那么写呢?可以参考一下这篇文章:
http://hbase.apache.org/book/number.of.cfs.html
首先,不同的family是在同一个region下面。而每一个family都会分配一个memstore,所以更多的family会消耗更多的内存。
其次,目前版本的hbase,在flush和compaction都是以region为单位的,也就是说当一个family达到flush条件时,该region的所有family所属的memstore都会flush一次,即使memstore中只有很少的数据也会触发flush而生成小文件。这样就增加了compaction发生的机率,而compaction也是以region为单位的,这样就很容易发生compaction风暴从而降低系统的整体吞吐量。
第三,由于hfile是以family为单位的,因此对于多个family来说,数据被分散到了更多的hfile中,减小了split发生的机率。这是把双刃剑。更少的split会导致该region的体积比较大,由于balance是以region的数目而不是大小为单位来进行的,因此可能会导致balance失效。而从好的方面来说,更少的split会让系统提供更加稳定的在线服务。
上述第三点的好处对于在线应用来说是明显的,而坏处我们可以通过在请求的低谷时间进行人工的split和balance来避免掉。
因此对于写比较多的系统,如果是离线应该,我们尽量只用一个family好了,但如果是在线应用,那还是应该根据应用的情况合理地分配family。

Table中Family和Qualifier的关系与区别(转载)相关推荐

  1. Spring中@Autowired、@Qualifier、@Resource的区别

    转自: Spring中@Autowired.@Qualifier.@Resource的区别_老周聊架构的博客-CSDN博客_qualifier和resource区别1.@Autowired@Autow ...

  2. C++中数组和指针的关系(区别)详解

    C++中数组和指针的关系(区别)详解 本文转自:http://c.biancheng.net/view/1472.html 博主在阅读后将文中几个知识点提出来放在前面: 没有方括号和下标的数组名称实际 ...

  3. data.table中选择列与data.frame的区别: This difference to data.frame is deliberate and explained in FAQ 1.1.

    太长不看版 data.table格式在调用列时, 加上逗号, 如果是字符串, 加上with=FALSE trait = "yield" dat[,trait,with=F] 使用o ...

  4. java中awt和swing是的关系以及区别

    二者的优缺点:轻量级元件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为. AWT 是抽象窗口组件工具包,是 java 最早的用于编写图形节目应用程序的开发包.  Swing 是为了解决 ...

  5. android中进程和线程的关系与区别

    什么是进程什么是线程 进程是指在系统中正在运行的一个应用程序:程序一旦运行就是进程 进程可以认为是程序执行时的一个实例.进程是系统进行资源分配的独立实体, 且每个进程拥有独立的地址空间.一个进程无法直 ...

  6. oracle中delete、truncate、drop的区别 (转载)

    一.delete 1.delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表 ...

  7. linux as 4 内核版本,Linux Redhat AS 4中编译内核与以往版本的区别(转载)

    曾经被问及为何在Redhat AS4中找不到内核源代码目录,开始时回答对方在安装时漏选了源码包,对方回答我已经重装过四遍,一个包一个包找过来眼都对起来了也没找到.真见鬼,我在电话里说要不你先到/usr ...

  8. php中global什么意思,php中global与$GLOBAL的用法及区别(转载)

    php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...

  9. 推荐: 五分钟搞懂Xen、KVM、Qemu间的关系和区别[转载]

    https://blog.csdn.net/ysbj123/article/details/51166343 转载于:https://www.cnblogs.com/wspblog/p/9203061 ...

最新文章

  1. 简单介绍实体类或对象序列化时,忽略为空属性的操作
  2. iMeta | 中科院生态中心邓晔组发布微生物组网络分析平台iNAP(图文/视频教程)
  3. DialogInterface.OnClickListener()和android.view.View.OnClickListener冲突问题
  4. protoc gen php,protoc-gen-php --php_out: protoc-gen-php: Plugin output is unparseable.
  5. 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。
  6. CI在mimes.php添加对apk文件上传下载的支持
  7. API设计原则 - Qt官网的设计实践总结
  8. Apollo进阶课程㉛丨Apollo ROS概述
  9. javaweb中jsp调试8080端口被占用问题
  10. 代码的抽象三原则【转载】
  11. using namespace cv
  12. 华为正式发布鸿蒙OS操作系统,分布式架构首次用于终端
  13. 无法打开文件ws32_2.lib ws2_32.lib
  14. #程序员健康 如何解救你的鼠标手
  15. 改xml文件默认打开方式
  16. 【面经】Linux零碎系列
  17. Win10图片打开方式没有“Windows照片查看器”
  18. 计算机学后感作文400,科技展观后感作文400字(精选7篇)
  19. 京东商城CEO徐雷年会演讲:我们抗住风霜 业务基本面良好
  20. CVPR 2020 | 《Learning to Transfer Texture from Clothing Images to 3D Humans》 论文解读

热门文章

  1. 简单使用TFS管理源代码
  2. Selenium with Python 001 - 安装篇
  3. 分治策略之最大子数组问题
  4. [转]Teach Yourself Programming in Ten Years——用十年教会自己编程
  5. 喷水装置(一)--nyoj题目6
  6. [WPF系列]-Deep Zoom
  7. java 集合类简单的分析1
  8. Java代码生成同一色系颜色_求大侠帮忙给这段JAVA代码 设置个背景颜色!
  9. Virtual DOM和diff算法 概念理解
  10. restful API 常用的四种方式