웹 사이트 및 전자 메일 모음을 구축하는 배치 정점 클래스가 있으므로 이러한 컬렉션을 사용하여 컬렉션으로 작성되는 다른 다른 쿼리를 필터링 할 수 있습니다. 모든 콜렉션이 설정되면 비즈니스 프로세스를 수행하는 범위의 최종 루프를 실행하려고합니다.대용량 데이터 세트에 대한 쿼리 Salesforce 배치 Apex 클래스
목업 :
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
}
내가이 시간에 대한 처리를 유지이 일괄 처리를 실행할 때 문제입니다. 다소 작은 데이터베이스로 작업 할 때 이것은 정상적으로 작동합니다. 그러나 더 큰 환경에서 일할 때 이것은 아마도 최선의 해결책이 아닙니다.
더 효과적인 방법으로 배치 프로세스의 속도를 높일 수있는 사람이 있습니까?
배치를 실행할 때 제공하는 배치 크기는 무엇입니까? 'Id BatchId = Database.executeBatch (일괄 처리, [이 번호는 무엇입니까?])'또한 일괄 처리에 대한 디버그 로그 요약을 게시 할 수 있습니까? 'SOQL 쿼리 수 : 0 개 중 0 개 \ n 쿼리 행 수 : 50000 개 중 0 개 .. '이러한 데이터는 속도 향상 방법을 결정하는 데 도움이됩니다. –
배치 크기를 제공하지 않습니다. 첫 번째 프로세스 실행 범위는 단지 300 레코드였습니다. 따라서 300 개의 목록 항목 모음이 쿼리 된 다른 개체 즉, 계정 및 연락처를 필터링하는 데 사용됩니다. 프로세스를 크게 늦추고있는 쿼리 된 다른 개체입니다. –
기본 일괄 처리 크기는 200입니다. 즉, start() 메소드에서 쿼리를 얻는 모든 항목이 200 개의 목록으로 분리되고, 한 번에 200 개의 항목이 범위로 전달됩니다. 한 번에 메인 쿼리의 모든 것을 처리 할 수는 없으므로이를 고려하여 로직을 다시 작성해야 할 수도 있습니다. –