社交软件----

story

feed(聚合服务)

联表查询
表冗余字段

java拼接
    user_service
        查询用户的avator和nick_name
    follow_service
        查询我是否关注
    item_service
        查询我的in_box
in_box如何设计
    redis zset

follow

数据库设计

MySQL

根据ER图设计表

create table follow(
    `id` bigint unsigned not null auto_increment comment '主键',
    `gmt_create` datetime null default current_timestamp,
    `gmt_modified` null default current_timestamp on update current_timestamp,
 
    `from_user_id` bigint unsigned not null comment '',
    `to_user_id` bigint unsigned not null comment '',
    primary key(`id`)
)

根据涉及的查询场景设置索引 

--查询关注列表
--同一个连接同一个数据库
select to_user_id,nick_name,avator,introduction
from follow join user on follow.to_user_id = user.id
where from_user_id=?
 
--查询关注列表
--同一个连接不同数据库
select to_user_id,nick_name,avator,introduction
from a.follow join b.user on follow.to_user_id = user.id
where from_user_id=?
 
 
--查询关注列表
--表字段冗余
select to_user_id,nick_name,avator,introduction
from follow
where from_user_id=?
 
--查询粉丝列表
select from_user id
from follow
where to_user_id=?
 
index idx_from_to(`from_user_id`,`to_user_id`)

item

数据库设计

create table item(
    `id` bigint unsigned not null auto_increment comment '主键',
    `gmt_create` datetime null default current_timestamp,
    `gmt_modified` null default current_timestamp on update current_timestamp,
 
    `from_user_id` bigint unsigned not null comment '',
    `to_user_id` bigint unsigned not null comment '',
    primary key(`id`)
)

校验参数
item->DB
异步任务
    审核
    nlp打标签
异步任务(MQ)
    if 大V
        item_id->
    item写入活跃粉丝的邮箱

模式

推
    when
        一开始可以都用推模式,因为推模式易于实现
    how
        一个用户发布了一个item,推送到粉丝的inbox
拉
    when
        用户的粉丝非常多
    how
        粉丝拉取关注用户的outbox,归并排序,去重,取几条
    缺点
        内存 网络
        业务逻辑复杂
推拉结合

微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨-阿里云开发者社区 (aliyun.com)

朋友圈微博feed流,推拉实践-CSDN博客 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值