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去查了。
我也想知道怎么解决,题主如果有解决方案了,麻烦分享一下。多谢。