我需要知道在MuleSoft中比较两个非常大的数组的快速有效的方法 [英] Need to know a fast and efficient way to compare two very large arrays in MuleSoft

查看:16
本文介绍了我需要知道在MuleSoft中比较两个非常大的数组的快速有效的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在从MySQL表(CustomTable)中提取所有记录,该表有一个主键。我还查询来自Salesforce的Salesforce对象(CustomTable_C)的所有记录。 我正在尝试查找Salesforce中但已从数据库中删除的记录。 TABLE和Salesforce都有大约8万条记录。我使用以下脚本进行比较,但此脚本需要很长时间才能完成。

Salesforce数据将以JSON格式传入:

[
        {
            "Product_Line__c": "Sample",
            "ExternalId__c": "a9M5C000000GoJxUAK",
        },
        {
            "Product_Line__c": "Sample2",
            "ExternalId__c": "a9M5C000000GoJxUAL"
        }
]

数据库记录以JSON格式传入:

[
  {
    "changed_on": "2021-12-08T11:24:50",
    "primaryKey":"a9M5C000000GoJxUAL"
  },
  {
   
    "changed_on": "2021-12-08T11:24:50",
     "primaryKey":"a9M5C000000GoJxUAQ"
  }
]

主键为字符串

预期输出(Salesforce和数据库中的主/外部ID差异:

[
   "ExternalId__c" : "a9M5C000000GoJxUAK",
   "Is_RM_Deleted__c" : true
]

我们有没有其他更好的方法可以更快地到达操作下方?

Salesforce.External aID是一个包含80k记录的数组

database ase.primary yKey是一个包含80k记录的数组

 %dw 2.0
   output application/json
    (salesforce.externalID -- database.primaryKey) 
     map {
    
        "ExternalId__c": $,
        "Is_RM_Deleted__c": true
    } 

推荐答案

通常,DW不是性能瓶颈。 您正在从数据库和Salesforce加载160k记录。 默认情况下,MuleSoft会尝试流式传输这些记录,并且一开始只加载几条记录。 在DW代码中,您同时使用两个流,这意味着在执行DW转换时,MuleSoft会将所有160K记录加载到内存中,这可能需要一些时间。

如果您希望了解消耗每个流需要多长时间, 您可以在DB和Salesforce查询之后添加带有sizeOf()的转换操作符。此sizeOf()函数使用流,您可以这样对其计时。

如果性能瓶颈是加载数据,您可能必须将其分解为较小的区块。

如果内存中已经有数据,您可以尝试这样的操作:

如果将记录加载到内存不是瓶颈,您可以尝试这样的操作:

%dw 2.0
output application/json

var salesforce = [
    { externalID: 1 }, 
    { externalID: 2 },
    { externalID: 3 }
]

var database = [
    { primaryKey: 1 },
    { primaryKey: 2 }
]

var bSearch = java!java::util::Arrays::binarySearch

var databaseSortedArray = database.primaryKey orderBy ($)
---
salesforce 
    filter ((databaseSortedArray bSearch $.externalID) < 0)
    map {
        ExternalId__c: $.externalID,
        Is_RM_Deleted__c: true,
    }

它使用标准的java函数进行二进制搜索,这需要对PrimaryKey数组进行排序。 为了获得更好的性能,您可以将ORDER BY子句添加到SQL查询,以便在数据库中进行排序。

这篇关于我需要知道在MuleSoft中比较两个非常大的数组的快速有效的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆