mysql分库分表的疑问
最近在研究分库分的方案,没什么经验,有疑问向大家请教一下。
比如一个订单表,有字段:下单人id,商品id,店铺id,下单时间等
在做分表时,首先考虑按下单人id做分割,这样买家查询数据会更快,但是卖家一般按店铺或者商品查询订单会不理想,还有客服、管理员等其他场景下的使用更会有这样的问题。
但如果按商品id做分割,买家查询会不理想。所以想向大家请教一下,应该怎么处理?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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