您的位置:首页 > 其它

什么情况下使用HBase

2015-09-20 12:01 309 查看
成熟的数据分析主题,查询模式已经确立并且不轻易改变

传统的关系型数据库已经无法承受负荷,高速插入,大量读取

适合海量的,但同时也是简单的操作(例如value-key)



场景一:浏览历史
关系数据库的困难:

简单的事情只要上了量就会变得无比复杂的事情



Orderby耗费很多性能



大量发生,但又无法分布式处理



顾客需要实时看到自己的足迹,因此不能使用缓存技术



HBase迎接挑战

天生就是面向时间戳的查询



行键的设计非常关键(因为HBase里面没有去重,关联等操作)。基于行键的查询异常迅速,特别是最近的数据被存放在内存的memstore里,完全没有IO开销



分布式化解负荷



模式设计:

行键:user_id

列族和列:book:bookid

为了充分利用分布式,可以用reverse key,hash等技巧改造行键



场景二:商品推荐
使用关系型数据库实现:

设计一个log表,包含用户名,时间戳和书id三列

selecta.threadid,count(distinct a.userid) from testtj a,testtj b

where a.userid = b.userid

and b.threadid = 1479820

groupby a.threadid order by 2 desc limit 10;



使用HBase:

表设计与查询实现(后面还有一种方法,复合行键)

两个表,一个是u-t,另一个是t-u

u-t表的结构:行键为userid,列族和列为thread:threaded

t-u表结构:行键为threadid,列族和列为user:userid

查询:先从t-u表从threadid -> userid,再在u-t表从

userid -> threaded,在计算程序中实现去重(mapreduce)和统计功能。



关系型数据库辅助索引:

例子:学生表(学号,***号,姓名,性别),有时在学号上查询,有时在***号上查询

主表:行键为学号,列族为学生,下面的列是***号,姓名,性别等

辅助(索引)表:行键为***号,列族和列为学号

复合行键设计:

原表:

<userid>:<colfamily>:<messageid>:<timestamp>:<email-message>

12345:data:232f22f2-f22f2f-f2-f2f2f2f:1307097848:”HiLars,…”

……………..

复合行键索引表:

<userid>-<messageid>:<colfamily>:<timestamp>:<email-message>

12345-232f22f2-f22f2f-f2-f2f2f2f:data: 1307097848:”Hi Lars,…”



好处:

便于分布

便于多条件伸缩查询
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: