V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sniperking1234
V2EX  ›  程序员

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

  •  
  •   sniperking1234 · 2023-03-27 19:52:12 +08:00 · 1136 次点击
    这是一个创建于 390 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在我有一个订单服务和分组服务,其中分组服务中存储订单 id 和分组的一个绑定关系,订单服务中存储着订单的信息,其中订单信息包含订单名称、状态等字段。

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

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

    OP 你这个也是差不多,先要根据分组拿到订单 ID 的集合,然后用这个集合做为查询条件。不过,如果订单 ID 数量很多的话,拼出来的 SQL 可能会超长,并且效率也会不太行。所以,就不要硬把同一个领域的数据拆分成两个数据库了。直接联表查询就好了。
    sniperking1234
        6
    sniperking1234  
    OP
       2023-03-27 22:46:50 +08:00
    @xuanbg 多谢回答,我参考下这个方法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2907 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:49 · PVG 21:49 · LAX 06:49 · JFK 09:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.