84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
有两张表,群表,群成员表,现在成员表比较大想进行分表
想到有两种分表方法,按人分或按群分
如果按人分,查询哪个人加入过哪个群很容易,但查询群有多少人报名就要用UNION去查了
如果按群分,查询群有多少人报名很容易,但查询哪个人加入过哪个群就要用UNION去查了
请问有什么好的方案可以令上面两个需求都可以高效查询,分表是为了减少查询压力,但用UNION又会增加查询压力,违背分表的初衷了
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
推荐使用hash方式分表,根据用户id进行hash分表,假设你有1亿的聊天记录,那么不到100张表也够了。
我觉得是不是改动一下群表,把用户队列值写进去:'1,2,3' 然后成员表按用户id范围分一下表不然的话你两个操作都要效率高 我觉得有点矛盾啊
建立两个关联表来统计,报名表和用户加群表。
如果id分布均匀,那就按照uid hash分表,没什么问题,查询用户加入过哪些群也很简单。查询群有多少人报名就要用UNION去查了。如果仅仅是想查多少人报名,比较容易解决:
可以改下表的设计,在群表加入一个用户数的字段也可以解决问题, 查询的时候直接查群表就好了;
或者采用redis的计数器来存群人数。
当然,还是还有一个问题没法解决,就是如果你想查群成员列表,还是得用UNION去查了。
我也想知道怎么解决,题主如果有解决方案了,麻烦分享一下。多谢。
推荐使用hash方式分表,根据用户id进行hash分表,假设你有1亿的聊天记录,那么不到100张表也够了。
我觉得是不是改动一下群表,把用户队列值写进去:'1,2,3' 然后成员表按用户id范围分一下表
不然的话你两个操作都要效率高 我觉得有点矛盾啊
建立两个关联表来统计,报名表和用户加群表。
如果id分布均匀,那就按照uid hash分表,没什么问题,查询用户加入过哪些群也很简单。查询群有多少人报名就要用UNION去查了。如果仅仅是想查多少人报名,比较容易解决:
可以改下表的设计,在群表加入一个用户数的字段也可以解决问题, 查询的时候直接查群表就好了;
或者采用redis的计数器来存群人数。
当然,还是还有一个问题没法解决,就是如果你想查群成员列表,还是得用UNION去查了。
我也想知道怎么解决,题主如果有解决方案了,麻烦分享一下。多谢。