This topic created in 1149 days ago, the information mentioned may be changed or developed.
现在我有一个订单服务和分组服务,其中分组服务中存储订单 id 和分组的一个绑定关系,订单服务中存储着订单的信息,其中订单信息包含订单名称、状态等字段。
然后现在有需求是给订单列表添加多个筛选条件,其中筛选条件有订单名称、订单状态、分组名称。但是订单的名称和状态是存在订单服务中,订单分组存在分组服务中,所以要怎么关联查询比较优雅呢。
我想到的方案是先从分组服务中查到这个分组下的所有订单 id ,然后根据订单 id 再从订单服务中筛选出符合条件的。或者先从订单服务筛查出 id 来,在调用分组服务筛选一次。不过我觉得都有点别扭,大家有什么比较好的方案吗
6 replies • 2023-03-27 22:46:50 +08:00
 |
|
1
Distand Mar 27, 2023
跨多个服务筛选条件还要支持同时查是做不了分页的 1. 说服产品两个服务的条件不同时查 2. 合并数据, 譬如搞个 es 把订单信息分组都整进去 3. 说服不了产品又不想增加依赖, 那就只能按你说的查了, 评估下哪边的条件区分度更高就先查哪个
|
 |
|
2
crazyweeds Mar 27, 2023
如果这是后台管理系统的需求,可以从 MySQL 的特性入手,MySQL 支持把多张表映射到一个库里面,这样关联查询就完事了。。如果是 C 端需求,思路其实差不多,只不过成本很高,把读拆分出去,把数据同步到 OLAP ,查询通过 OLAP 实现,如果是 MySQL ,那么就是 binlog 同步之类的方案了,就像你说的,别扭。除非这个需求真的非常重要,不然真的如同楼上所说。
|
 |
|
3
hhjswf Mar 27, 2023 via Android
es 做个宽表吧
|
 |
|
5
xuanbg Mar 27, 2023 1
我说一个按组织机构查自己管辖业务的办法吧。因为组织机构的上下级关系在基础平台上,业务表只有机构 ID 。所以呢,先要调用组织机构服务获取用户所在机构以及下级机构的 ID 集合,然后用这个集合作为条件去查询业务。
OP 你这个也是差不多,先要根据分组拿到订单 ID 的集合,然后用这个集合做为查询条件。不过,如果订单 ID 数量很多的话,拼出来的 SQL 可能会超长,并且效率也会不太行。所以,就不要硬把同一个领域的数据拆分成两个数据库了。直接联表查询就好了。
|