提问者:小点点

MongoDB设计计算结果的有效方法


我正在使用Java,spring-引导和为db一个MongoDB。 在mongo中,我的human集合结构如下

{
  "_id": {
    "$oid": "5eaf79f4bce37709f84f6b03"
  },
  "claimNo": 123
  "xrays": [
    "xray1",
    "xray2",
    "xray3"
  ],
  "xray_details": {
    "xray1": {},
    "xray2": {},
    "xray3": {},
  },
  "claimResult": "A"
}

Xrays对象包含X射线的名称。 xray_details包含每个X射线的详细信息。 所以它就像我们最初创建这个文档时; xray_detailsclaimresult不包含任何信息。 我们在它准备好后就会得到信息,例如,对于xray2,我们可能会得到一些信息,但是对于xray3和xray1,我们可能会在15分钟后得到信息。 我们需要做的是,一旦我们有了一些信息,我们需要计算和更新ClaimResult

详细说明:在xray_details中,我们获得了xray2的信息,但是xray1xray3不可用,因此我们只考虑xray2并更新claimresult。 一旦我们得到一些其他X射线信息,即Xray1Xray2,然后我们将使用Xray1Xray2来计算ClaimResult,并且一旦在稍后我们得到Xray3,然后我们需要再次检查/确认我们是否已经有使用Xray1Xray2Xray3来计算ClaimResult的信息。

问题:在这个阶段,我们正在制作一个调度器来计算结果,但这并不是有效的,我们需要这样做,一旦信息可用,我们就会考虑到之前已完成的,然后再次计算结果。 不知道像Kafka这样的解决方案是否能在这种情况下工作,但请随时提供您对此有价值的反馈/建议。 谢啦!


共1个答案

匿名用户

正如您所提到的,scheduler在这里不可能是高效的。

为什么排定程序不是最好的:

  1. 如果没有更改,可能需要低效地轮询详细信息
  2. 当db轮询效率低下时,它将影响db上挂起的其他请求。

什么是最好的:

正如你所怀疑的,卡夫卡是最合适的。 与其他消息传递系统相比,我更喜欢Kafka,因为Kafka是持久的,并且您可以让单个消费者组中的许多消费者并行处理消息

每当输入新条目时,向Kafka Topic发布一条消息。 将调度程序应用程序逻辑转换为消息驱动。 它将在发布新消息时自动处理新消息。