分库分表以后的多维度查询问题

简介: 分库分表以后的多维度查询问题

公众号merlinsea


多维度查询问题介绍


   在进行分库分表的时候应该有碰到一个问题,一个数据需要根据两种维度进行查询,但是我们在进行分库分表是只能根据一种维度进行。比如:用户购买了商品产生了订单,当用户非常多的时候,我们会选择订单【根据下单用户的ID进行分库分表】。但是这里面存在一个问题就是作为卖家要如何查询我卖出的所有订单呢?因为订单是根据用户id规则进行分库分表的,卖家订单查询接口物理上是无法一次查询出当前的订单的,因为客户的数据分别分布在不同的订单库或者订单表中的,有可能商家自己所有客户的订单列表,需要跨非常多的表,这个样性能是非常低效的。


解决方案


   方案1:建立两个维度的订单数据库买方库和卖方库,买方数据库中的表基于用户id进行分片,卖方数据库中的表基于商家id进行分片。两个数据可以通过datax数据同步框架将买方库的数据根据商家id同步到卖方库中。通过DataX实现数据同步不是实时的,DataX是基于定时任务完成数据同步的,如果将时间间隔设置的比较小,会存在一定的cpu性能浪费。

640.jpg

方案2:将数据基于用户id分片的数据进行汇总,然后存储在NoSql数据库中,比如elasticSearch,这样在商家进行查询的时候直接走 ElasticSearch即可。

640.jpg



相关文章
|
存储 缓存 监控
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
小伙伴们,有没有遇到过程序突然崩溃,然后抛出一个OutOfMemoryError的异常?这就是我们俗称的OOM,也就是内存溢出 本文来带大家学习Java OOM的三大经典场景以及解决方案,保证让你有所收获!
6829 2
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
|
SQL 关系型数据库 数据库
学习分布式事务Seata看这一篇就够了,建议收藏
学习分布式事务Seata看这一篇就够了,建议收藏
24409 2
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩在读者群中分享了关于分库分表的基因算法设计,旨在帮助大家应对一线互联网企业的面试题。文章详细介绍了分库分表的背景、分片键的设计目标和建议,以及基因法的具体应用和优缺点。通过系统化的梳理,帮助读者提升架构、设计和开发水平,顺利通过面试。
美团面试:百亿级分片,如何设计基因算法?
|
Java Maven
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
1773 3
|
算法 Java 数据库连接
SpringBoot3分库分表
按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用;水平分片又称为横向拆分,是通过某些字段根据某种规则将数据分散至多个库或表中。
1420 0
|
消息中间件 存储 监控
RabbitMQ、Kafka对比(超详细),Kafka、RabbitMQ、RocketMQ的区别
RabbitMQ、Kafka对比(超详细),Kafka、RabbitMQ、RocketMQ的区别,设计目标、适用场景、吞吐量、消息存储和持久化、可靠性、集群负载均衡
RabbitMQ、Kafka对比(超详细),Kafka、RabbitMQ、RocketMQ的区别
|
存储 缓存 安全
如何保证接口幂等性,幂等性到底是干什么的
本文介绍了幂等性原则及其在程序中的应用。首先定义了幂等性,即无论执行多少次,结果不变的特性,并区分了幂等与非幂等操作。接着详细探讨了实现幂等性的策略,如使用唯一标识符、幂等性标记字段、乐观锁版本控制等。最后,通过Java示例展示了如何实现无状态幂等操作,并强调了幂等性在分布式系统和高并发场景下的重要性。
1482 0
|
Java Spring
Spring Boot——Spring Boot启动原理
Spring Boot——Spring Boot启动原理
1499 0

热门文章

最新文章