公众号merlinsea
多维度查询问题介绍
在进行分库分表的时候应该有碰到一个问题,一个数据需要根据两种维度进行查询,但是我们在进行分库分表是只能根据一种维度进行。比如:用户购买了商品产生了订单,当用户非常多的时候,我们会选择订单【根据下单用户的ID进行分库分表】。但是这里面存在一个问题就是作为卖家要如何查询我卖出的所有订单呢?因为订单是根据用户id规则进行分库分表的,卖家订单查询接口物理上是无法一次查询出当前的订单的,因为客户的数据分别分布在不同的订单库或者订单表中的,有可能商家自己所有客户的订单列表,需要跨非常多的表,这个样性能是非常低效的。
解决方案
方案1:建立两个维度的订单数据库买方库和卖方库,买方数据库中的表基于用户id进行分片,卖方数据库中的表基于商家id进行分片。两个数据可以通过datax数据同步框架将买方库的数据根据商家id同步到卖方库中。通过DataX实现数据同步不是实时的,DataX是基于定时任务完成数据同步的,如果将时间间隔设置的比较小,会存在一定的cpu性能浪费。
方案2:将数据基于用户id分片的数据进行汇总,然后存储在NoSql数据库中,比如elasticSearch,这样在商家进行查询的时候直接走 ElasticSearch即可。