首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >需要知道一种快速有效的方法来比较MuleSoft中的两个非常大的数组

需要知道一种快速有效的方法来比较MuleSoft中的两个非常大的数组
EN

Stack Overflow用户
提问于 2022-01-31 03:28:33
回答 1查看 419关注 0票数 0

我从一个MySQL表( customTable)中获取所有记录,这个表有一个主键。我还从salesforce对象(customTable__c)从salesforce查询所有记录。我正在试图找到销售人员的记录,但已从数据库中删除。桌子和销售队伍都有大约80000张唱片。我使用下面的脚本进行比较,但是这个脚本需要很长时间才能完成。

salesforce数据以JSON格式出现:

代码语言:javascript
运行
AI代码解释
复制
[
        {
            "Product_Line__c": "Sample",
            "ExternalId__c": "a9M5C000000GoJxUAK",
        },
        {
            "Product_Line__c": "Sample2",
            "ExternalId__c": "a9M5C000000GoJxUAL"
        }
]

数据库记录以JSON格式出现:

代码语言:javascript
运行
AI代码解释
复制
[
  {
    "changed_on": "2021-12-08T11:24:50",
    "primaryKey":"a9M5C000000GoJxUAL"
  },
  {
   
    "changed_on": "2021-12-08T11:24:50",
     "primaryKey":"a9M5C000000GoJxUAQ"
  }
]

主键是一个字符串。

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

代码语言:javascript
运行
AI代码解释
复制
[
   "ExternalId__c" : "a9M5C000000GoJxUAK",
   "Is_RM_Deleted__c" : true
]

我们还有别的好办法吗?我们能更快地完成任务吗?

salesforce.externaID是一个80k记录的数组。

database.primaryKey是一个80k记录的数组。

代码语言:javascript
运行
AI代码解释
复制
 %dw 2.0
   output application/json
    (salesforce.externalID -- database.primaryKey) 
     map {
    
        "ExternalId__c": $,
        "Is_RM_Deleted__c": true
    } 
EN

回答 1

Stack Overflow用户

发布于 2022-01-31 06:27:08

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

如果您想要找到消耗每个流所需的时间,可以在DB和Salesforce查询之后添加带有sizeOf()的转换操作符。这个sizeOf()函数消耗了流,您可以这样计时它。

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

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

如果在内存中加载记录不是瓶颈,您可以尝试这样的方法:

代码语言:javascript
运行
AI代码解释
复制
%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数组进行排序。为了获得更好的性能,可以向SQL查询中添加order子句,以便在DB中进行排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70925208

复制
相关文章
在 Vim 编辑器中开发 Python 应用的 Vim 插件
企鹅号小编
2018/01/05
1.8K0
在 Vim 编辑器中开发 Python 应用的 Vim 插件
初探在WSL中设置vim前端开发环境
在之前的 《在win10的WSL中设置前端开发环境》 一文中,介绍了 win10 结合其 linux 子系统(WSL)的前端开发设置,使用的是 VSCode 开发工具。
江米小枣
2020/06/15
2.2K0
在Linux中vim的用法
vi 编辑器是所有 Unix 及 Linux 系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。 由于对 Unix 及 Linux 系统的任何版本,vi 编辑器是完全相同的,因此你可以在其他任何介绍 vi 的地方进一步了解它。Vi 也是 Linux 中最基本的文本编辑器,学会它后,你将在 Linux 的世界里畅行无阻。 1、vi 的基本概念 基本上 vi 可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和
沈唁
2018/05/24
3K0
在FinClip中如何使用小程序插件?
最近总发现很多萌新把小程序插件和小程序组件搞混淆。简单来说,组件和插件的区别在于,插件是可以直接提供服务的,组件是给开发者的轮子提高开发效率的,这是两回事。
海岛船长加西亚
2022/10/19
2.3K0
在IDEA中Jrebel插件安装与使用
在进行java开发的过程中,需要将代码编译为class文件,之后打包为jar文件,如果在tomcat等容器下运行,则需要反复重新部署。这个操作非常耗时和无聊,虽然IDEA和eclipse等有诸多热部署的插件来解决这个问题,Jrebel则是最好的热部署插件之一。 本文介绍在IDEA下如何安装Jrebel及激活该插件。
冬天里的懒猫
2021/03/02
3.9K0
在IDEA中Jrebel插件安装与使用
在vim 中批量添加注释
批量注释: Ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 // 或 #,输入完毕之后,按两下 ESC,Vim 会自动将你选中的所有行首都加上注释,保存退出完成注释。
程序员小涛
2020/12/03
15.9K0
category在iOS开发中的使用
上面是后端同学按照照module的方式开发的服务,在整个的项目中请求中前缀相同而每个module都有自己的前缀,结合起来整个请求URL格式就可以拆分为
大话swift
2019/11/20
8010
关于在vim中的查找和替换
在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。 Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。
休辞醉倒
2019/07/25
26.2K0
在Android开发中怎样使用Application类
自己独立开发项目才发现以前对Application类并不是十分了解,现在开始直接搭建一个新项目的框架才重新踩过这个坑。
1025645
2018/08/23
2.2K0
在Android开发中怎样使用Application类
xshell工具在开发中的使用技巧
这个没啥好说的,但是很实用,特别对于单显示器的情况。5.0或以上才支持,鼠标拖拽标签到屏幕某一个位置即可实现。
后端云
2018/10/24
1.5K0
在vim中快速复制粘贴多行
用vim写代码时,经常遇到这样的场景,复制多行,然后粘贴。 我现在这样做: 1. 将光标移动到要复制的文本开始的地方,按V(是大写V)进入可视模式。 2. 将光标移动到要复制的文本的结束的地方,按y复制。此时vim会自动将光标定位到选中文本的开始的地方,并退出可视模式。 3. 移动光标到要粘贴的位置,按p粘贴。
joshua317
2018/04/16
5.2K0
在 Vim 中使用 graphviz.vim 画图
本文主要介绍 graphviz.vim, fork 自 wmgraphviz.vim,但是除了复用补全数据,我几乎重写了所有内容,并做了很多改进。
用户1558438
2019/02/22
1.4K0
在 Vim 中使用 graphviz.vim 画图
在文章中插入超美的音乐播放插件开发记录
是不是有点复杂呢?而且鸡肋呢?没错下一款插件我就准备推出 mokplayer 实现 typecho 遗留问题 音乐播放
乔千
2020/04/16
1.6K0
在文章中插入超美的音乐播放插件开发记录
在sublime中安装sass编译插件
打开sublime,在preference选项下有没有package control这个选项,如果没有的话,就表示你没有Package Control 插件(一个方便 Sublime text 管理插件的插件),这时,你就要从菜单 View - Show Console 或者 ctrl + ~ 快捷键,调出 console。将以下 Python 代码粘贴进去并 enter 执行,不出意外即完成安装。
小胖
2018/09/19
7890
在Android开发中怎样使用Application类(二)
最近项目太紧,都没时间总结写下自己的开发路上的技术心得了。是时候调整下自己的工作和学习节奏了。 接着上次总结的Application类的实际项目使用Android开发中怎样使用Application类,最近我又发现了一个取巧的使用方法,给想要快速开发的同学分享下心得,也是给大家多提供一个思路吧。
1025645
2018/08/23
1.6K0
开发|使用war包部署在Tomcat中运行
简单来说,war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西。
算法与编程之美
2019/07/17
2.5K0
开发|使用war包部署在Tomcat中运行
点击加载更多

相似问题

在OCaml中实现Coq策略

15

在VIM中开发Java有哪些好的插件?

582

OCaml注释在vim中的不良缩进

27

从Coq中提取Ocaml中的__

11

在Vim中卸载插件

510
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档