查询组合资源


我头上有犄角
2025-03-12 03:32:20 (1月前)


我目前正在尝试设计一个小型REST API。

假设我有一个由多个其他资源(例如作者)组成的资源(书)。

两种资源都有单独的API部署…

2 条回复
  1. 0# ࿏自ོ༾由ོ༽人͙⃡⌇ | 2019-08-31 10-32



    您的案例显然要求在这些实体(资源)之间实施一对多类型的可靠关系。你正在寻找的模式是……

    关系数据库
    </强>
    !它们是针对这个特定用例而发明的。



    这就是我的建议:




    第一
    </强>
    ,您需要考虑并评估在特定情况下这种分离和隔离数据是否是一个合理的设计决策,看看您自己设置的缺点和权衡。有没有理由把这些数据放在不同的数据库中?



    考虑以下最重要的缺点:




    1. 你最终可能会

      表现不佳的查询
      </强>
      ;


    2. 你将无法做到

      利用数据库索引
      </强>
      以及其他一些很好的功能,以便您在未来获得优势。这可能会妨碍你的能力
      在未来适当扩展


    3. 你最终可能会

      不一致的数据
      </强>
      。例如,作者中的作者现在在作者中缺失。所以你需要一种方法来获得可靠的约束(想想
      数据库之间的外键,即使它可能是
      可实现的是不必要的复杂性


    4. 你是

      错过了固有的交易环境
      </强>
      数据库提供的。如果你将来需要它,你会遇到问题。

    5. </醇>



      在考虑了上述之后
      </强>
      ,如果你仍然认为你有充分的理由在不同的数据库中拥有这些相关数据,你可以尝试下面的任何一个选项(注意每种选择都是一种带来其自身缺点的解决方法):





      1. 在API之间实现一种JOIN

        doing as little calls as possible

        。我的意思是在作者资源中有一个唯一的作者ID,查询作者首先使用该名称并获取其唯一ID。然后使用此ID查询Books并获取所有匹配的书籍。因此,您只需要2次通话,而不是可能有数千次通话。这个解决方案不变

        Ø

        (1)代替

        Ø

        (N) - 线性 - 复杂性。






      2. Replication

        数据(但如果您的设计目标是数据隔离,那将会破坏目的)。这将解决查询问题,但您必须同时处理复制和更多管理。





      3. 使用实现单独数据库之间的连接

        dblink

        或者您正在使用的数据库的类似功能,以便将它们作为单个数据库进行查询。





      4. 使用介质与单独的微服务之间的事件进行通信,但最终确定一致性和其他缺点。

        请参阅此处的文章。



      5. </醇>


        希望这可以帮助!


登录 后才能参与评论