数据结构和算法问题(多对多数据)
时间: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下面的数组,最终达到尽量少的重复数据,尽量快的检索算法.
应用中使用缓存来使这些数据成为热数据.
应用中体现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
反过来亦可查询,sql倒过来写就行了
这个表中有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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28