大家好,我是【架构摆渡人】,一只十年的程序猿。这是分库分表系列的第一篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友。
其实这个系列有录过视频给大家学习,但很多读者反馈说看视频太慢了。也不好沉淀为文档资料,希望能有一系列文字版本的讲解,要用的时候可以快速浏览关键的知识点。那么它就来了,我再花点时间写成几篇连续的文章供大家学习。
需求背景
单库单表的时候,我们在实现业务需求的时候,是不会考虑说哪些字段不能用于查询,只要表中有的字段就可以用它来做条件查询。
当分库分表后,就必须要要考虑查询条件中得有哪些字段。必须要有的肯定是分片的字段,比如你根据用户ID进行分片,然后查询的时候却没有用户ID,这样就没办法知道这条SQL到底要去哪个库哪个表查询,只能查询所有的库表进行结果的聚合逻辑,性能非常差。
比如我们以订单来说明,常用的查询场景有根据订单号查询,根据买家查询订单,根据卖家查询订单。
比如我们以用户来说明,常用的查询场景有根据用户ID查询,根据用户名查询,根据手机号码查询。
但是大家想一个问题,就是你分表都是根据一个字段去分的,比如订单的买家,也就是所有买家的订单都会在某个库的某个表中存储。直接根据买家是可以定位到数据的位置,但是如果直接根据订单号和卖家去查,是无法定位数据的存储位置。用户的查询也是一样的问题,这就是我们今天要讲的内容。
实现方式
映射表方式
目前查询订单有三个场景,分别是买家,订单号,卖家或者