mysql分库分表的疑问

中华雪碧
  • 204

最近在研究分库分的方案,没什么经验,有疑问向大家请教一下。
比如一个订单表,有字段:下单人id,商品id,店铺id,下单时间等

在做分表时,首先考虑按下单人id做分割,这样买家查询数据会更快,但是卖家一般按店铺或者商品查询订单会不理想,还有客服、管理员等其他场景下的使用更会有这样的问题。

但如果按商品id做分割,买家查询会不理想。所以想向大家请教一下,应该怎么处理?

回复
阅读 1.5k
2 个回答

分库分表是解决查询效率的问题。一点小想法,可不可以这么来理解
1.对查询速度最敏感是用户,优先考虑以用户ID来分割,优化前端用户的查询速度
2.店铺ID和订单ID另建一张冗余表来建立关联
3.订单和商品是多对多关系,可以以商品ID来分表,并建冗余表关联
4.可不可以引入其他技术来实现,比如mongodb、E Search

我的想法:
1.下单人id就是user_id咯,user表肯定放到主库里面的,而商品表似乎没有想到对应的shard_nodes那我也放到主库中去。
2.我理解的店铺应该是和用户关联的,那就可以用user_id做shard_nodes将其存到分库中区,然后用es做分词.
3.下单既然是和用户有关的行为,那同样用user_id做shard_nodes将其存到放分库中去

那么效果就来了,既然是分库,那肯定不会存在单个shard库中对应表的数据量过于膨胀(比如下单表,如果全存到主库中,假设下单积累量有100w那一次查询就是100w的过滤操作,而如果根据user_id垂直分割,shard_routing到20个分库中,那平均均摊的分库也就5w下单数据量,这查询肯定快很多)

综上,去分库获取对应user_id的用户的下单数据,然后拿着其余字段去商品/店铺等等取数据。
like 图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏