【问题标题】:Mule AnyPoint Studio, efficiently insert inside a DB a large number of items from array (json)Mule AnyPoint Studio,有效地在数据库中插入大量来自数组(json)的项目
【发布时间】:2020-05-20 11:02:55
【问题描述】:

我有一个像下面这样的 json 作为 POST 请求的正文。

{
  "summary": {
    "transactionId": "5003k00000zSuNaAAK",
    "transactionNumber": "T12345",
    "overall": 100,
    "date": "15/05/2020",
    "details": [
      {
          "transactionDetailId": "CC12345",
          "product_code": 223242234,
          "price": 1500,
          "amount": 1000
        },
        {
          "transactionDetailId": "DD12345",
          "product_code": 679685675,
          "price": 1100,
          "amount": 90
      },
       {
          "transactionDetailId": "SS12345",
          "product_code": 345346643,
          "price": 2000,
          "amount": 300
      },
.......other 100 items
    ]
  }
}

在我的 AnyPoint Studio 项目中,使用 forEach 模块循环 details[] 和批量插入,我能够执行 INSERT,并将详细信息数组的所有项目写入我的 postgres DB。 因此,对于每个项目,都会执行一个 INSERT。

考虑到包含超过 1000 个项目的数组,是否有更有效的方法来执行此操作?

【问题讨论】:

    标签: mule sql-insert mule-studio mulesoft mule-esb


    【解决方案1】:

    更好的方法是将 dteails[] 提取为有效负载,然后基于此数组项进行批量插入。不涉及 forEach,它的工作速度要快得多。在这种情况下也使用流,内存需求会更好。

    【讨论】:

    • 如果我传递只包含项目数组的paylod,我需要为每个项目循环并将每个项目写入我的数据库......
    • 我不会这么说的。这就是创建批量插入的目的。它要好得多,因为它在批量过程中执行此循环,因此速度要快得多。快得多。
    • ...怎么样?如何在我的新负载中使用基于数组的批量插入?
    • Bulk 与常规插入完全相同。只需输入有效负载是项目数组,SQL 查询就像处理一个项目一样。您不能使用原始有效负载,因为它不是数组。提取数组详细信息,然后您可以使用它。如果您需要原始有效负载中的某些内容,例如 transactionNumber - 将其保存到 vars 中并在这些 vars 的公共 sql 中使用它。如果您需要更多帮助,请告诉我。
    • 但是您在批量插入中的有效负载是数组的一项。以前的有效载荷消失了。这就是为什么我建议将其值存储在 vars 中。如果您在 Mule 3 中,它应该看起来像 INSERT INTO public."detailsTable"( "transactionDetailId", product_code, price, amount) VALUES (flowVars.transactionDetailId, payload,product_code........)。
    猜你喜欢
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多