HBase应用:Table设计

背景知识

HBase基本类型定义:

Table:表

RowKey:行健,主键

Column Family:列族,包含一个或者多个相关列

Column:属于某一个columnfamily,familyName:columnName,每条记录可动态添加

timestamp:每次操作对应的时间戳,支持用户自定义,默认为当前时间的毫秒值

value:值,和timestamp一起支持多version的概念

通过HBase Shell可以拿到一条数据,如下:

hbase(main):007:0> scan ‘bi.dpdim_imei_dpid_mapping‘,{LIMIT=>1}

ROW                                                COLUMN+CELL

352784041181135                            column=dim:dpid, timestamp=1400657685457, value=4369382019346202985

对应内容:

352784041181135 =》 RowKey

dim =》 Column Family

column =》 dpid

timestamp => 1400657685457

4369382019346202985  => value

HBase存储结构:

1.HBase以表(HTable)的形式存储数据

2.HTable包括很多行,每行通过RowKey唯一标记,行按照RowKey的字典序排列,表在行的方向上分割为多个HRegion

3.每行包括一个RowKey和多个Column Family,数据按照Column Family进行物理切割,即不同Column Family的数据放在不同的Store中,一个Column Family放在一个Strore中

4. HRegion由多个Store组成。一个Store由物理上存在的一个MemStrore(内存中)和多个StoreFile(HFile)中

设计

从应用角度,有两点比较重要:

1. HBase中RowKey是按照字典序排列的

2. 不同Column Family的数据,在物理上是分开的

在做table设计的时候,主要围绕上述两点做文章。

RowKey的设计需要根据请求数据特点:

1.单个查询,需要尽量缩小Key的长度

2.范围查询,根据RowKey按字典序排列的特点,针对查询需求设计rowkey,保证范围查询的rowkey在物理上存放在一起

Column Family的设计需遵循:尽量避免一次请求需要拿到的Column分布在不同的Column Family中

实例

对于基于RowKey的范围查询设计,我们来看一个实例

1. 给出userid,返回这个userid最近插入的N条数据

2. 给出userid,及一个时间区间,返回这个时间区间的N条数据

针对需求,Key设计如下:

Userid_DataTime_InertTime

Userid:即userid

DataTime:数据所属时间(ms),定义为:Long.MAX_VALUE - dataTime.getTime(),由于RowKey字典序排列,可以使最近插入的数据排在前面,支持“最近插入的N条数据”的需求

InsertTime:数据入库时间(ns),取nanotime(InsertTime的存在是由于在这个应用中,Userid+DataTime不能唯一定位一条数据)

Key生成代码如下:

//生成RowKey
private String buildPutRowKey(int userId, Date addTime) {
        String key = userId + "_" + getRowKeyTimestamp(addTime) + "_" + System.nanoTime();
        return key;
}
//构建DataTime
private long getRowKeyTimestamp(Date addTime) {
        return Long.MAX_VALUE - addTime.getTime();
}

HBase应用:Table设计

时间: 2024-08-01 09:53:28

HBase应用:Table设计的相关文章

HBase的rowkey设计(含实例)

转自:http://www.aboutyun.com/thread-7119-1-1.html 对于任何系统的数据设计,我们都想提高性能,达到资源最大化利用,那么对于hbase我们产生如下问题: 1.hbase rowkey设计如何才能提高性能?2.hbase rowkey如何设计才能散列到不同的节点上? 访问hbase table中的行,只有三种方式: 1 通过单个row key访问2 通过row key的range3 全表扫描 文中可能涉及到的API: Hadoop/HDFS:http://

Hbase中rowkey设计原则

Hbase中rowkey设计原则 1.热点问题 在某一时间段,有大量的数据同时对一个region进行操作 2.原因 对rowkey的设计不合理 对rowkey的划分不合理 3.解决方式 rowkey是hbase的读写唯一标识 最大长度是64KB. 4.核心原则 设计必须按照业务需求进行设计 5.长度原则 经验:10~100字节可以 官方:16字节,因为操作系统时8字节进行存储 6.散列原则 划分region是按照rowkey的头部进行划分. 有几种方式: )组合字段 id+timestamp )

HBase原理、设计与优化实践

转自:http://www.open-open.com/lib/view/open1449891885004.html 1.HBase 简介 HBase —— Hadoop Database的简称,Google BigTable的另一种开源实现方式,从问世之初,就为了解决用大量廉价的机器高速存取海量数据.实现数据分布式存储提供可靠的方案.从功能上来 讲,HBase不折不扣是一个数据库,与我们熟悉的Oracle.MySQL.MSSQL等一样,对外提供数据的存储和读取服务.而从应用的角度来 说,HB

网易视频云:HBase原理和设计

网易视频云是网易推出的视频云服务平台,为客户提供真正易用的视频云服务,全面的端到端解决方案,全程技术专家接入指导.下面,网易视频云的技术专家给大家分享一下:HBase原理和设计. 简介 HBase -- Hadoop Database的简称,Google BigTable的另一种开源实现方式,从问世之初,就为了解决用大量廉价的机器高速存取海量数据.实现数据分布式存储提供可靠的方案.从功能上来讲,HBase不折不扣是一个数据库,与我们熟悉的Oracle.MySQL.MSSQL等一样,对外提供数据的

HBase之Table.put客户端流程

首先,让我们从HTable.put方法开始.由于这一节有很多方法只是简单的参数传递,我就简单略过,但是,关键的方法我还是会截图讲解,所以希望大家尽可能对照源码进行流程分析.另外,在这一节,我单单介绍put操作在客户端的流程,毕竟,这个内容已经很多了.至于具体服务端的流程,我会在后面的章节中介绍到,欢迎大家到时候阅读. 由于这一节的方法还是比较复杂的,我特地画了一张思维导图,大家可以先通过思维导图来对本节的内容有一个大概的了解,置于具体的流程,我在下面将对照源码的贴图一一为大家讲解(在这里声明一点

HBase之Table.put客户端流程(续)

上篇博文中已经谈到,有两个流程没有讲到.一个是MetaTableAccessor.getRegionLocations,另外一个是ConnectionImplementation.cacheLocation.这一节,就让我们单独来介绍这两个流程. 首先让我们来到MetaTableAccessor.getRegionLocations. 1.调用MetaTableAccessor.getRegionInfo,获取返回结果集中指定的列信息(info:regioninfo)的值.在这个方法的调用过程中

【HBase】HBase的RK设计、避免热点

一.HBase的RK设计 HBase读写数据大多数是通过RK,MemStore/HFile存储也是按照字典顺序排列的RK存储,所以要关注RK. RowKey设计原则: 1)长度原则: RowKey不应该超过16字节,因为若是过长再以KV形式存储,对于HFile和MemStore来说会极大的占用存储空间. 2)唯一原则: 保证RowKey的唯一性,若向HBase中同一张表插入相同RowKey的数据,则原先存在的数据会被新的数据覆盖 3)排序原则: RowKey是按照字典序排序的.HBase中的数据

hbase 利用rowkey设计进行多条件查询

摘要 本文主要内容是通过合理Hbase 行键(rowkey)设计实现快速的多条件查询,所采用的方法将所有要用于查询中的列经过一些处理后存储在rowkey中,查询时通过rowkey进行查询,提高rowkey的利用率,加快查询速度.行键(rowkey)并不是简单的把所有要查询的列的值直接拼接起来,而是将各个列的数据转成整型(int)数据来存储.之后实现两个自定义的比较器(comparator):一个是相等比较器,用于实现类似于SQL的多条件精确查找功能. select * from table wh

【HBase】Rowkey设计【转】

本章将深入介绍由HBase的存储架构在设计上带来的影响.如何设计表.row key.column等等,尽可能地使用到HBase存储上的优势. Key设计 HBase有两个基础的主键结构:row key和column key.它们分别用来表征存储的数据和数据的排序顺序.以下的几节将讨论如何通过key设计解决存储设计中发现的一些问题. 概念 相比于物理存储,首先谈谈表的逻辑结构.与传统的面向列的关系型数据库为基本单元不同,HBase的基本存储单元为列簇(column family).从图9-1可以看