Java微服务如何处理跨库查询?
最近在做微服务的开发,突然发现一个问题,就是微服务好像是每个服务对应一个数据库,那么,微服务之间如果存在关联查询的话,那怎么做跨库查询呢?
回答:
微服务目标是解耦,所以千万别跨库查询!!!
另外微服务拆分是一门艺术活,我先假设你拆的是合理的,且你说的关联查询用数据库解决
比如你的需求是统计报表,那么老老实实再建一个报表服务和包含两个表的数据库,数据库是通过其他服务的表同步过来的,前提是牺牲了一致性和数据时效性,这样的情况下正常关联查询就好
当然根据具体需求应该还有其他更好的方案,具体情况具体分析
回答:
Sql表名前加上库名
回答:
首先,考虑你的微服务拆分是否合理,为什么还会存在这类跨库查询的情况?合并成一个微服务是否更合理?
其次,MongoDB是文档型数据库不是关系型数据库,做关联数据查询它并不擅长,为什么设计时未考虑将关联数据聚合到一条文档记录中,便于查询,而不是分散到多个文档记录中?
最后,如果该业务确实需要用到关联查询等关系型数据库的特性,是否可以考虑将MongoDB文档数据库切换为关系型数据库,会更合适些?
回答:
看看这篇文章:分布式微服务系统的跨库查询/操作的解决思路(关系型数据库)
用 MongoDB的话有这两种:
用 $lookup 操作符。 $lookup 操作符可以从库里查询数据,并把结果与另一个库里的数据进行合并。
用 $graphLookup 操作符。 $graphLookup 操作符可以从库里查询数据,并把结果与另一个库里的数据进行关联
以上是 Java微服务如何处理跨库查询? 的全部内容, 来源链接: utcz.com/p/945269.html