一)、什么情况下使用Hbase

1)传统数据库无法承载高速插入、大量读取。

2)Hbase适合海量,但同时也是简单的操作。

3)成熟的数据分析主题,查询模式确立不轻易改变。

二)、现实场景

1、电商浏览历史

问题:

传统数据库

数据量很大,事情会变得复杂。

Order by 消耗很多性能。

大量发生又无法分布式处理,顾客需要事实看到自己足迹,传统数据库无法使用缓存。

Hbase

面向时间查询。

基于行健查询速度快,新产生数据存于内存中的memstore,完全没有IO开销。

分布式化解负荷。

思路:

RoeKey:userid

列族和列:book:bookid

/如果用userid作为RowKey进行存储,会发生因Rowkey范围制动进行分配存储节点时会发生因范围过小而之分配到一个或几个节点上发挥不出分布式系统的性能,

****为了充分利用分布式可以进行reverse  key,Hash技巧进行行健设计。

reverse  key    将userid进行导置如 userid为 11,12,13,14,15,16,17,18,19,20,11,12。

进行reverse  key后会变成 21,11,02,91,81,71,61,51,41,31,21,11.这样会随机画的分配到多个节点上。

Hash

将userid进行hash生成hash值进行userid映射。

2、浏览XXXX贴子的人还浏览了XXX贴

Hbase实现

两张表,u-t,t-u

U-t结构:RowKey为userid,列族和列thread:threadid

T-u结构:RowKey为userid,列族和列user:userid

查询:t-u  threadid->userid   再从u-t userid->threadid,  获得笛卡尔积(会存在大量无用数据)在程序中去重和统计。

2、多条件查询

例子:Student(sno,cardid,sname,sex,age)有时以sno进行查询,有事以cardid进行查询。

问题:传统型数据库中,一张中可以有多个字段为查询条件,但Hbase中只可以对Rowkey进行条件查询,

解决方案:主表 RowKey:sno。列族为学生 列为  cardid,name,sex,age.

辅助表:RowKey:cardid   列族和列为 sno。

复合行键设计

例子;

Userid (用户id)、 Messageid(邮件id)、<email-message>(邮件内容)

有时需要查询某人的所有邮件(Rowkey为userid即可),有事又需要查询某人具体的邮件(userid和 Messageid为查询条件,如果邮件又1000+利用辅助表进行查询不是十分适合)利用复合行键 RowKey:userid-Messageid    对userid查询时,对RowKey进行分词,

好处:便于分布式,便于多条件伸缩查询。

此随笔非原创

Hbase笔记——RowKey设计的更多相关文章

  1. 大数据性能调优之HBase的RowKey设计

    1 概述 HBase是一个分布式的.面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有就是它基于列的而不是基于行的模式. 既然HBase是采用KeyValue ...

  2. HBase之六:HBase的RowKey设计

    数据模型 我们可以将一个表想象成一个大的映射关系,通过行健.行健+时间戳或行键+列(列族:列修饰符),就可以定位特定数据,Hbase是稀疏存储数据的,因此某些列可以是空白的, Row Key Time ...

  3. Hadoop生态圈-Hbase的rowKey设计原则

    Hadoop生态圈-Hbase的rowKey设计原则 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  4. Hbase的rowkey设计

    HBase的rowKey设计技巧 1.设计宗旨与目标 主要目的就是针对特定的业务模型,按照rowKey进行预分区设计,使之后面加入的数据能够尽可能的分散于不同的rowKey中.比如复合RowKey. ...

  5. HBase的RowKey设计原则

    HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定 ...

  6. HBase的Rowkey设计(mark)

    在HBase中细节上的设计,最最最重要的就是我该选取什么做Rowkey,Rowkey的选择,最直接的影响就是对你之后分析数据的影响了. Rowkey是不可分割的字节数,按照字典排序由低到高存储在表中. ...

  7. HBase的rowkey设计(含实例)

    转自:http://www.aboutyun.com/thread-7119-1-1.html 对于任何系统的数据设计,我们都想提高性能,达到资源最大化利用,那么对于hbase我们产生如下问题: 1. ...

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

    摘要 本文主要内容是通过合理Hbase 行键(rowkey)设计实现快速的多条件查询,所采用的方法将所有要用于查询中的列经过一些处理后存储在rowkey中,查询时通过rowkey进行查询,提高rowk ...

  9. Hbase中rowkey设计原则

    1.热点问题 在某一时间段,有大量的数据同时对一个region进行操作 2.原因 对rowkey的设计不合理 对rowkey的划分不合理 3.解决方式 rowkey是hbase的读写唯一标识 最大长度 ...

随机推荐

  1. sqort函数用法总结

    qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序.排序之后的结果仍然放在原数组中.使用qsort函数必须自己写一个比较函数. 函数原 ...

  2. ubuntu 乱码 改为英文

    http://878045653.blog.51cto.com/2693110/735654 解决方法: 改成全英文环境来解决 方格 乱码 : 用vim配置语言环境变量 vim / etc/envir ...

  3. Linux kmalloc/kfree 源码解读

    kmalloc/kfree用于划分和回收内核空间低区内存的方法.改组方法没有直接通过伙伴系统进行内存的划分,通过slab算法进行分配的.同时也为每个CPU提供一个阵列缓存,用于提高分配效率.下面对改组 ...

  4. codeforces 235 div2 C Team

    题目:http://codeforces.com/contest/401/problem/C 题意:n个0,m个1,求没有00或111的情况. 这么简单的题..... 做题的时候脑残了...,今天,贴 ...

  5. hdu 1559 最大子矩阵 (简单dp)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1559 #include <cstring> #include <cstdlib> ...

  6. 循环中不要放入openSession()

    for(Shop s:list) { System.out.println(s.getName()); String sql="select shopId,sum(ele_bank+ele_ ...

  7. abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

    abstract的method不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系! native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实 ...

  8. bzoj2324营救皮卡丘

    费用流. 建图比较重要. 1.S->id[0][0] flow=k. 表示k条路径. 2.S->id[i][0] flow=1, 每次消耗1流量就补充1流量. 3.id[i][1]-> ...

  9. 解析CSS加密技术之“障眼法”

    CSS(Cascading Style Sheet,可译为“层叠样式表”或“级联样式表”)是一组格式设置规则,用于控制Web页面的外观.通过使用CSS样式设置页面的格式,可将页面的内容与表现形式分离. ...

  10. 【 D3.js 高级系列 — 7.0 】 标注地点

    有时需要告诉用户地图上的一些目标,如果该目标是只需要一个坐标就能表示的,称其为"标注". 1. 标注是什么 标注,是指地图上只需要一个坐标即可表示的元素.例如,在经纬度(116, ...