开发者学堂课程【HBase入门教程:HBase表设计_8】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/397/detail/5088
HBase表设计_8
内容介绍
一、例子一
二、例子二
一、例子一
A B C
C 粉丝 A B
A 关注 C
B 关注 C
假如 A 要发一条微博,对应 A 的用户 id :uid_(long.max-time) 作为 rowkey ,为微博表里存数据,微博内容就放到 content 里。假如 A 再发一条微博,将在后面再加一条数据。因为 A 没有粉丝,所以粉丝列表为空。
假如 C 发了一条微博,和 uid_(long.max-time) 和用户 id C 组合降序做一个组合的 rowkey ,此时和 A 的区别是,C 有粉丝,重新开启一个线程,去粉丝列表里查看有哪些粉丝,查到之后需要往收微博表里添加数据。需要给 A 用户的收微博表添加一条数据,收微博表是用户 id 作为 rowkey ,之后找到 id=uid_(long.max-time) 将微博写进,对应也需要向 B 的收微博表添加数据。cell 里只要你关注的用户发了微博都会往里面存值,低版本放在下面,高版本放在上面,通过版本去实现降序。
二、例子二
A B C D
C 粉丝 A B
A 关注 C D
B 关注 C
D 粉丝 A
C 用户发了一个微博,重开一个线程找到 C 用户的粉丝列表,粉丝 A 的收微博表会被添加一条数据。这时 D 发了一条微博,重开一个线程找到 D 用户的粉丝列表,因为 D 的粉丝里有 A ,需要找到 A 收微博表的 cell ,再 put 一个值进去。C 先发的微博所以在下面 D 在上面,只要后来都发布都会添加上去,发布完微博之后给微博表里添加数据,与此同时再把对应粉丝的收微博表添加一个数据,这个顺序通过版本来控制的,查看某一个用户或者查看自己的微博,通过最大值减去时间差得到的,时间排序两种方法。
假如只有粉丝关注用户表和微博表,登录之后查看首页,假如A用户登录查看, A 关注了 C 和 D ,把 C 用户和 D 用户发布的微博拿出来,先找到关注列表 C 和 D,根据 c 和 d 的 id 把微博全部拿出来,C 发的微博是降序,D 发的微博也是降序。假如,C 2014年发布的微博,2015年又发布了一条,D 2013年发布一条,2016年又发布一条,本身这个数据存储的时候是个降序,2015在前,2014在后边,D 的2016在前,2013在后,把这两组数据都拿出来,这个集合里边的微博顺序就乱了。
在现实场景当中,刚注册一个微博发了一条,平时也关注了其他用户,客户端还要做一次排序,这样设计并不合理,所以加了收微博表。