私は、ウェブサイトと電子メールのコレクションを構築しているバッチ頂点クラスを持っているので、それらのコレクションを使用して、コレクションになる他のクエリをフィルタリングできます。すべてのコレクションを設定したら、スコープの最終ループを実行してビジネス プロセスを実行したいと考えています。
モックアップ:
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
}
問題は、このバッチを実行すると、何時間も処理が続くことです。かなり小さなデータベースで作業する場合、これはうまく機能します。しかし、大規模な環境で作業する場合、おそらくこれは最善の解決策ではありません。
より効果的なアプローチでバッチプロセスを高速化するのを手伝ってくれる人はいますか?