多维度分片需求,如何解决查询问题?

大家好,我是【架构摆渡人】,一只十年的程序猿。这是分库分表系列的第一篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友。

其实这个系列有录过视频给大家学习,但很多读者反馈说看视频太慢了。也不好沉淀为文档资料,希望能有一系列文字版本的讲解,要用的时候可以快速浏览关键的知识点。那么它就来了,我再花点时间写成几篇连续的文章供大家学习。

需求背景

单库单表的时候,我们在实现业务需求的时候,是不会考虑说哪些字段不能用于查询,只要表中有的字段就可以用它来做条件查询。

当分库分表后,就必须要要考虑查询条件中得有哪些字段。必须要有的肯定是分片的字段,比如你根据用户ID进行分片,然后查询的时候却没有用户ID,这样就没办法知道这条SQL到底要去哪个库哪个表查询,只能查询所有的库表进行结果的聚合逻辑,性能非常差。

比如我们以订单来说明,常用的查询场景有根据订单号查询,根据买家查询订单,根据卖家查询订单。

比如我们以用户来说明,常用的查询场景有根据用户ID查询,根据用户名查询,根据手机号码查询。

但是大家想一个问题,就是你分表都是根据一个字段去分的,比如订单的买家,也就是所有买家的订单都会在某个库的某个表中存储。直接根据买家是可以定位到数据的位置,但是如果直接根据订单号和卖家去查,是无法定位数据的存储位置。用户的查询也是一样的问题,这就是我们今天要讲的内容。

实现方式

映射表方式

目前查询订单有三个场景,分别是买家,订单号,卖家或者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值