一、主体思路

先确定查询场景,再确定表结构。

二、主键设计

主键设计需要考虑两个问题:1.选择哪些作为主键?2.当主键大于1个时,如何排列。

2.1 逻辑上用于表示行的唯一性的列必须作为主键

2.2 单个查询场景中一定出现的列可以考虑加入主键列,用于优化查询性能

2.3 在多个查询场景都出现的主键列要排在前面。

如果出现两个列各占部分场景,怎么排列都会使一部分场景无法达到性能要求,这时候我们要考虑二级索引

三、普通列设计

在保持语义情况下尽量使用尽量使用更短的名字,节省空间

Phoenix支持列族的概念,一个列由列祖名+列名唯一指定。

四、热点问题

分为读热点和写热点。

检索Hbase中的数据首先通过rowkey来定位数据行,当大量的client访问Hbase一个或少数几个节点,造成少数region server的读/写请求负载过大,其他region负载很小,这就造成了热点现象。热点现象会导致热点region所在单个主机上负载过大,引起region性能下降甚至不可用。

热点产生原因是因为大量连续编号的(大量相似的)rowkey的记录集中在个别的region中,解决此问题思想在于:尽量均衡的把每条记录均衡的分散到不同的region中。有很多方法可以达到这个目的,例如在行键前添加一个不连续的前缀。

4.1 随机化

如果查询都是Get类型,即只查询一个对象,可以对主键进行HASH,将HASH作为第一个主键列,常用的HASH方式是:MD5,反转。

byte[] rowKey = MD5(timestamp)

采用MD5之类的散列函数能将行键分散到所有region服务器上。对于时间连续的数据,这种方法明显不是好方法,因为随机化后,用户将不能再按时间范围扫描数据。随机化的方法很适合每次只读一行数据应用。如果用户数据不需要连续扫描而只需要随机读取,用户可以使用这种策略。

4.2 salting方式

用户可以使用salting方法将数据散列到所有的region服务器上去。

byte prefix = (byte)(Long.hashCode(timeStamp) % < number of region servers >)

byte[] rowKey = Bytes.add(Bytes.toByte(prefix),Bytes.toBytes(timestamp))

这样做的缺点是当用户要扫描一个连续范围时,可能需要对每个region服务器都发起请求(因为之前连续的数据,现在已经分散到不同的服务器中)。这样也会带来好处,用户可以并行的读取数据,这有点类似于一个小规模的MapReduce作业,这样查询的吞吐量有所提高。

Hbase表结构设计相关推荐

  1. HBase表结构设计(结构、创建、压缩、分区、命名空间等)

    HBase表结构设计(结构.创建.分区.命名空间等) 任务表述: 如果用户点击某一行数据则触发接口写数据进入HBase.那么当用户再次读取数据的时候数据A和数据B返回的数据就需要给返回的数据另外增加一 ...

  2. 【HBase——陌陌海量存储案例】3. HBase表结构设计(下)

    前言 本文是HBase实战--陌陌海量存储案例--HBase表结构设计的最后一部分, 编写数据生成器.数据服务查询数据. 4.7 编写数据生成器 4.7.1 测试工具类ExcelReader读取测试数 ...

  3. 【HBase——陌陌海量存储案例】2. HBase表结构设计(中)

    前言 本文是陌陌海量存储案例--HBase表结构设计(中),介绍ROWKEY设计原则.项目初始化. 4.5 ROWKEY设计原则 4.5.1 HBase官方的设计原则 避免使用递增行键/时序数据 如果 ...

  4. 分布式列数据库--理解hbase列存储机制、架构、表结构设计、命令操作

    1. HBase简介 HBase是Hadoop Database的简称,是建立在Hadoop文件系统之上的分布式面向列的数据库. HBase和HDFS HDFS适用于存储大容量文件的分布式文件系统,不 ...

  5. 16进制 hbase phoenix_【建议收藏】HBase表的RowKey设计

    Hello,大家好,我是勾叔.今天和大家谈一下HBase表的RowKey设计,谈HBase表的RowKey设计之前,先来认识RowKey. RowKey简介 RowKey,即每行数据的主键.Rowke ...

  6. 谈Apache OFbiz 会员模块表结构设计

    数据库表的结构设计可谓是ofbiz除技术框架之外,另一个非常值得学习的方向.这篇文章我们来谈谈ofbiz对电子商务会员表的设计. PARTY ofbiz对人.团体进行了抽象,称之为party,翻译为中 ...

  7. 用户画像:数据指标与表结构设计

    本篇博客介绍一下画像中需要开发的数据指标与开发过程中表结构的设计. 首先介绍画像开发的数据指标,画像开发过程中通用类的指标体系包括用户属性类.用户行为标签类.用户活跃时间段类.用户消费能力类.用户偏好 ...

  8. HBase表创建、删除、清空

    HBase shell窗口进入 执行命令hbase shell rowkey(行键) product(列簇) food(列簇) name(列标识符) price(列标识符) name price(列标 ...

  9. Shiro表结构设计

    表设计 开发用户-角色-权限管理系统,首先我们需要知道用户-角色-权限管理系统的表结构设计. 在用户-角色-权限管理系统找那个一般会涉及5张表,分别为: 1.sys_users用户表 2.sys_ro ...

最新文章

  1. WAIC | Annotator 5.0标注平台盛大发布暨AI数据生态联盟成立
  2. Linux Kernel TCP/IP Stack — Overview
  3. 一个按键控制数码管的开和关_三菱PLC数码管显示及按键控制实验
  4. vba发送邮件 签名_如何更改“从Windows 10的邮件发送”签名
  5. [转]图片格式WEBP全面解析
  6. D. Best Edge Weight(最小生成树 + 树链剖分)(Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals))
  7. Leetcode 08. 字符串转换整数 (atoi)
  8. 8 年后重登王座,Python 再度成为 TIOBE 年度编程语言
  9. nginx 负载均衡tomcat
  10. galileo 汉化
  11. AutoCAD 二次开发之 ObjectARX 环境搭建
  12. 软件测试必须知道的缺陷分析
  13. 安装部署VMware vSphere 为IBM x3850 X5服务器安装配置VMware ESXi
  14. maya导入abc动画_如此导出ABC缓存,扩展秘籍(二)!!!
  15. 获取斗鱼直播间的弹幕信息
  16. 天馈线测试仪是什么?
  17. python数据组织存在维度吗_用Python 爬取蔡徐坤新浪微博 10 万转发数据,从数据的维度看看存在多少假流量...
  18. 《整洁代码之道》学习书摘(二)第一章——整洁代码
  19. Android 开源交流 QQ 群分享汇总
  20. 舅妈的计算机课第2部,名著课 | 题:《简·爱》(二)

热门文章

  1. 浙大开源 | VID-Fusion: 用于精确外力估计的鲁棒视觉惯性动力学里程计
  2. DEMO: 一种单目视觉里程计的深度增强方法
  3. QT子对话框中的变量如何相互调用
  4. js通过正则表达式解析xml 获取指定的内容
  5. RNA和机器学习:多维生物标志物的合理设计
  6. 杀死多余的ghost 的Android emulator-5554 offline 的方法总结
  7. html靶心制作,用PS单色填充制作一个靶心
  8. js webpack 配置路径_webpack中如何设置html引入js的路径
  9. 生物信息培训之WGCNA-权重基因共表达网络分析
  10. Microbiome: 绝对定量环境样本细菌、真菌、真核群落丰度