我目前解析由一個upserted到DB一個JS對象的列表upserting數據庫,大致是這樣使用的是Node.js:承諾與散裝
return promise.map(list,
return parseItem(item)
.then(upsertSingleItemToDB)
).then(all finished!)
的問題是,當列表大小變得非常大(〜3000個項目),並行解析所有項目的內存過於龐大。在promise庫中添加併發限制非常簡單,並且不會以這種方式耗盡內存(何時/保護)。
但我想優化db的upserts,因爲mongodb提供了一個bulkWrite函數。由於一次解析和批量寫入所有項目是不可能的,因此我需要將原始對象列表拆分爲更小的集合,這些集合使用promise並行解析,然後將該集合的結果數組傳遞給promisified bulkWrite。如果列表項目在剩下的集合中會重複。
我很難包裝我的頭如何可以構造更小的承諾集,以便我只做一組parseSomeItems-BulkUpsertThem(類似Promise.all([set1Bulk] [set2Bulk] ),其中set1Bulk是另一個並行解析器Promise的數組?),任何僞代碼的幫助將不勝感激(但我使用時,如果這有所作爲)。
啊,遞歸,當然!我的大腦在圈子裏跑來跑去試圖做出一些長長的承諾......感謝一大堆,這正是我期待的<3 – usagidon