在用 Bulk API in parallel mode load 大量 Data 的時候,容易遇到 record lock contention。其實有個前置處理的小技巧……
小技巧
如果你要 load 的 data 有 Master-Detail 的 Parent 欄位或是 Lookup 欄位,可以試試看先在 csv 檔裡面針對這個欄位做排序。
Salesforce 給的官方建議原文是:Pre-sort the child records by parent Id in her CSV file to lessen the chance of parent record lock contention among parallel load batches.
(請參考: Salesforce Anti-Patterns: A Cautionary Tale )
原理說明
因為在 load data 的時候,對應的 parent record/被lookup的 record 會被 lock 住,以維資料正確完整。(可參考這篇詳細說明: )
如果所 load 的資料未經排序,而 bulk API 又選擇了 parallel mode ,則對應到同樣 parent record 的child record 就可能散落在平行處理的各個線程(threads)中。就變成各線程你卡我、我卡你,大家都動不了。
如果有先排序,就可以讓同樣 parent 的 child record 都盡可能集中在同一個線程中,一次處理。
就不太會卡來卡去囉~
留言
張貼留言