跨多个微服务的列表筛选怎么实现比较好

2023-03-27 19:52:12 +08:00
 sniperking1234
现在我有一个订单服务和分组服务,其中分组服务中存储订单 id 和分组的一个绑定关系,订单服务中存储着订单的信息,其中订单信息包含订单名称、状态等字段。

然后现在有需求是给订单列表添加多个筛选条件,其中筛选条件有订单名称、订单状态、分组名称。但是订单的名称和状态是存在订单服务中,订单分组存在分组服务中,所以要怎么关联查询比较优雅呢。

我想到的方案是先从分组服务中查到这个分组下的所有订单 id ,然后根据订单 id 再从订单服务中筛选出符合条件的。或者先从订单服务筛查出 id 来,在调用分组服务筛选一次。不过我觉得都有点别扭,大家有什么比较好的方案吗
1153 次点击
所在节点    程序员
6 条回复
Distand
2023-03-27 20:13:36 +08:00
跨多个服务筛选条件还要支持同时查是做不了分页的
1. 说服产品两个服务的条件不同时查
2. 合并数据, 譬如搞个 es 把订单信息分组都整进去
3. 说服不了产品又不想增加依赖, 那就只能按你说的查了, 评估下哪边的条件区分度更高就先查哪个
crazyweeds
2023-03-27 20:34:46 +08:00
如果这是后台管理系统的需求,可以从 MySQL 的特性入手,MySQL 支持把多张表映射到一个库里面,这样关联查询就完事了。。如果是 C 端需求,思路其实差不多,只不过成本很高,把读拆分出去,把数据同步到 OLAP ,查询通过 OLAP 实现,如果是 MySQL ,那么就是 binlog 同步之类的方案了,就像你说的,别扭。除非这个需求真的非常重要,不然真的如同楼上所说。
hhjswf
2023-03-27 20:42:05 +08:00
es 做个宽表吧
sniperking1234
2023-03-27 21:09:28 +08:00
@Distand @crazyweeds @hhjswf
感谢解答,貌似用 es 或者 olap 服务做个宽表是比较好的选择
xuanbg
2023-03-27 22:09:54 +08:00
我说一个按组织机构查自己管辖业务的办法吧。因为组织机构的上下级关系在基础平台上,业务表只有机构 ID 。所以呢,先要调用组织机构服务获取用户所在机构以及下级机构的 ID 集合,然后用这个集合作为条件去查询业务。

OP 你这个也是差不多,先要根据分组拿到订单 ID 的集合,然后用这个集合做为查询条件。不过,如果订单 ID 数量很多的话,拼出来的 SQL 可能会超长,并且效率也会不太行。所以,就不要硬把同一个领域的数据拆分成两个数据库了。直接联表查询就好了。
sniperking1234
2023-03-27 22:46:50 +08:00
@xuanbg 多谢回答,我参考下这个方法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/927641

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX