如何处理微服务应用下不同数据库表的条件、排序和分页的多表关联查询
来源:3-7 数据库设计

奋斗的小鸟丷
2020-04-07
由于现在每个微服务用单独的一个数据库,但是不同数据库表之间可能会有关联关系,假设A服务为商品服务,有商品信息表,B服务为订单服务有商品的购买记录表,那么如何处理商品按照销量的排序或以销量为过滤条件的分页查询?
写回答
1回答
-
要想实现这种诉求,一般有3种方式:
冗余,也就是把需要的条件,都存到一个微服务里面去。但是冗余带来的问题是两个微服务之间数据一致性的挑战,很麻烦
远程接口一个一个玩,这种做法存在缺陷,首先很多列表查询性能很差;第二场景下条件如果在两个微服务里面,很多时候没办法实现目标
同步大法。把两个微服务甚至更多微服务的数据,同步一个专门的数据分析库里面,然后跨微服务的查询统一到这个库里查。这个数据分析库很可能不是传统的数据库,而是一些NOSQL或者数据分析引擎。
我司目前主要采用了1、3两种方案。视业务场景(例如实时性需求、数据不一致的容忍性等)和实现复杂度而定。
另外,多说两句:
如果发现你的项目有大量这种跨微服务的查询,很可能说明你的微服务拆分有问题。应该考虑把微服务合并,而不是想办法用技术硬抗。
再一个,很多时候,也可以和产品MM、需求MM沟通,看业务上能否妥协,如果业务上就能避免掉一些技术上不能实现的需求,那也是极好的。
012020-04-07
相似问题