+ -
当前位置:首页 → 问答吧 → 数据结构和算法问题(多对多数据)

数据结构和算法问题(多对多数据)

时间:2011-12-26

来源:互联网

场景: 数据库中: 1W个用户(U),50W朵大红花(F), U和F的关系是多对多.

应用中使用缓存来使这些数据成为热数据.

应用中体现U和F关联关系的形式是: 所有的F放在一个数组里,同时每个用户下有一个数组,数组里放着跟这U有关系的F的id.

使用方式: 客户端通过提交用户id过来,服务器通过uid找到U,然后在该用户下的数组中随机选取一个F的id,最后通过fid找到F,将F返回给客户端.

瓶颈: 花被多少用户引用,则有多少花的id是重复数据,每个用户下都有一个数组,1000W个用户就会有1000W个数组.内存放不了,即便硬件跟上了检索也会慢.

问题: 如何换一种方式,或者说数据格式来体现U和F的多对多关系,尽量减少这种U下面的数组,最终达到尽量少的重复数据,尽量快的检索算法.

作者: javaskdylym   发布时间: 2011-12-26

一般需要第三个表来表达ManyToMany

这个表中有uid fid, PK为uid+fid

假设你的user表叫user, flower表叫flower, 关系表叫 u_f

查询所有user1的花的语句就是
SQL code
SELECT f.* FROM flower f
LEFT JOIN u_f ON u_f.fid = f.id
LEFT JOIN user u ON u.id = u_f.uid
WHERE u.id = 1


反过来亦可查询,sql倒过来写就行了


作者: yktd26   发布时间: 2011-12-26

热门下载

更多