2

我在 mule 中有一个流程,可以从大约 470.000 条记录的数据库中获取所有记录。这些记录我必须放入salesforce。Salesforce 只允许我每次迭代插入 200 条记录!不幸的是,我无法在一次数据库调用中获得所有这些记录,它会使机器内存过载。所以我的想法是在 Mule 中使用“foreach”组件来继续循环,直到我从我的 db 调用中获得少于 200 条记录。

这些是如何实现的?

我的配置流程在这里:

<foreach batchSize="200" doc:name="For Each" counterVariableName="foreachCount">
        <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="select200records" queryTimeout="-1" connector-ref="postgresConnector" doc:name="Database">
            <jdbc-ee:query key="select200records" value="select * from parties limit 200 offset #[variable:offset]"/>
        </jdbc-ee:outbound-endpoint>
        <set-variable variableName="dbPayload" value="#[payload]" doc:name="Variable"/>
        <scripting:component doc:name="Script">
            <scripting:script engine="jython"><![CDATA[result = len(payload)]]></scripting:script>
        </scripting:component>
....
4

2 回答 2

2

Salesforce 有多种批处理 api 限制

数据加载的批次可以包含一个不超过 10 MB 的 CSV 或 XML 文件。

  • 一个批次最多可以包含 10,000 条记录。
  • 一个批次中的所有数据最多可以包含 10,000,000 个字符。
  • 一个字段最多可以包含 32,000 个字符。
  • 一条记录最多可以包含 5,000 个字段。
  • 一条记录的所有字段最多可包含 400,000 个字符。
  • 批次必须包含某些内容,否则会发生错误。

如果您使用 mule salesforce 连接器,我记得有一个 Bulk 选项允许超过默认批量大小。

于 2013-07-26T19:38:53.323 回答
0

Mule EE JDBC 传输为这个用例提供了一个 BatchManager。请参阅用户指南中的大型数据集检索

于 2013-07-29T23:13:17.167 回答