Salesforce Batch Apex类 - 查询大型数据集

时间:2012-05-02 17:38:29

标签: collections batch-file salesforce force.com

我有一个批量顶点类,我正在构建网站和电子邮件的集合,以便我可以使用这些集合来过滤其他其他查询,这些查询将被创建为集合。设置完所有集合后,我想运行范围的最后一个循环来执行业务流程。

样机:

for(Object o : scope)
{
listEmails.add(o.Email);
listWebsites.add(o.Websites);
}

Map<String, Account> accounts = Gather all accounts where website not in :listWebsties; //Website is key
List<String, Contact> contacts = Gather all contacts where email not in :listEmails; //Email is key

for(Object o : scope)
{
   Account = accounts.get(o.website);
   Contact = contacts.get(o.Email);

   Perform business logic here
}

问题是当我运行这个批处理时它会持续数小时处理。使用相当小的数据库时,这很好用。但是在更大的环境中工作或许这不是最好的解决方案。

任何人都可以通过更有效的方法帮助我加快批处理过程吗?

1 个答案:

答案 0 :(得分:0)

无论如何都要发布整批顶级课程吗?或者更多地帮助理解数据? 从您的地图看,您的所有帐户(理论上)都有独特的网站,所有联系人都有独特的电子邮件? 我假设你手工制作这些地图?那就是你循环帐户并做一个 map.put(account.website,帐户)?

您是否有任何系统调试语句来确认您的地图大小? 如果在调用accounts.get()时没有帐户或没有联系人会怎么样?

业务逻辑 - 它是否更循环?

您是否以静态方式使用批处理变量 - 即您可以使用计数器来计算处理的记录总数。如果是这样,你的变量是一个列表吗?当然这可能是危险的。

你的范围对象也是什么对象?这并不重要,但我认为您希望将您的范围设置为帐户本身或联系人本身。

我会尝试将system.debug语句添加到批处理中以验证它是否正在运行并查看无限循环可能发生的位置。