一、需求分析
1.需要知道哪些用户关注了zhangsan,使这些用户能看到其朋友圈。
2.需要知道zhangsan关注了哪些用户,计算zhangsan能看到的评论。
3.为保证用户体验,zhangsan的朋友圈打开速度要求很快。
二、设计过程
1.由需求1、2构建用户关系表,以用户ID作为行键,每列存储一个该用户关注的人的用户ID。得到表数据如下:
t_user表
| 行键 | 列族(cf) |
|---|---|
| 列用户名(n) | |
| 12345 | zhangsan |
| 12346 | lisi |
| 12347 | wangwu |
t_following表
| 行键 | 列族(cf) | |
|---|---|---|
| 列1 | 列2 | |
| 12345 | 12346 | 12347 |
| 12346 | 12345 | 12347 |
| 12347 | 12345 | 12346 |
2.上述表满足了需求2中查看zhangsan关注了哪些用户,若想知道zhangsan被哪些用户关注,可将表改为“用户ID+被关注人用户ID”作为行键。将t_following表改为如下表:
t_following表
| 行键 | 列族(cf) |
|---|---|
| 列用户名(n) | |
| 12345_12346 | lisi |
| 12345_12347 | wangwu |
| 12346_12345 | zhangsan |
| 12346_12347 | wangwu |
| 12347_12345 | zhangsan |
| 12347_12346 | lisi |
3.通过使用开关标记,即0代表关注,1代表被关注合并关注表与被关注表。
行键12345_0_12346表示zhangsan关注lisi;行键12346_1_12345表示zhangsan被lisi关注,则可将t_following表更新为如下表:
| 行键 | 列族(cf) |
|---|---|
| 列用户名(n) | |
| 12345_0_12346 | lisi |
| 12345_0_12347 | wangwu |
| 12345_1_12346 | lisi |
| 12345_1_12347 | wangwu |
| 12346_0_12345 | zhangsan |
| 12346_0_12347 | wangwu |
| 12346_1_12345 | zhangsan |
| 12346_1_12347 | wangwu |
| 12347_0_12345 | zhangsan |
| 12347_0_12346 | lisi |
| 12347_1_12345 | zhangsan |
| 12347_1_12346 | lisi |
4.朋友圈的业务流程如下:
(1)lisi发布一张朋友圈图片,图片会上传到lisi最近的CDN缓存服务器,图片上传成功后会返回一个引用地址;
(2)lisi的微信客户端将朋友圈内容及图片引用地址发布到微信服务器自己的相册;
(3)发布完成后,如果zhangsan刷新自己的朋友圈时间线,由于zhangsan关注了lisi,因此zhangsan会看到lisi刚刚发布的朋友圈。
根据其业务流程,由“用户ID+时间戳”作为行键,列族cf包括两列,列t用来存储文字内容,列p用来存储图片的CDN缓存地址,得到t_album表如下:
| 行键 | 列族(cf) | |
|---|---|---|
| t | p | |
| 12345_时间戳1 | zhangsan向你问好 | http://url1 |
| 12346_时间戳2 | 这是lisi的朋友圈 | http://url2 |
| 12347_时间戳3 | 来自wangwu的消息 | http://url3 |
5.为满足需求3,可将业务流程改成如下情况以提高效率。
(1)lisi发布一张朋友圈图片,图片会上传到lisi最近的CDN缓存服务器,图片上传成功后会返回一个引用地址;
(2)lisi的微信客户端将朋友圈内容及图片引用地址发布到微信服务器自己的相册;
(3)通过t_following表查询哪些用户关注了lisi,将lisi发布的朋友圈内容以及图片插入到这些用户的TimeLine;
(4)zhangsan刷新自己的朋友圈,直接从zhangsan的时间线表查询出数据展示。
根据其业务流程,由“用户ID+时间戳+发布者ID”作为行键,列族cf包括3列,列t用来存储文字内容,列p用来存储图片的CDN缓存地址,列u用来存储发布者的个人基本信息,得到t_timeline表如下:
| 行键 | 列族(cf) | ||
|---|---|---|---|
| t | p | u | |
| 12345_时间戳2_12346 | 这是lisi的朋友圈 | http://url2 | lisi,http://picurllisi |
| 12345_时间戳3_12347 | 来自wangwu的消息 | http://url3 | wangwu,http://picurlwangwu |
| 12346_时间戳1_12345 | zhangsan向你问好 | http://url1 | zhangsan,http://picurlzhangsan |
| 12346_时间戳3_12347 | 来自wangwu的消息 | http://url3 | wangwu,http://picurlwangwu |
| 12347_时间戳1_12345 | zhangsan向你问好 | http://url1 | zhangsan,http://picurlzhangsan |
| 12347_时间戳2_12346 | 这是lisi的朋友圈 | http://url2 | lisi,http://picurllisi |
手写的


