에 데이터베이스에 upserting :약속 및 대량
return promise.map(list,
return parseItem(item)
.then(upsertSingleItemToDB)
).then(all finished!)
문제는 그 때 목록 크기가 매우 커져서 (~ 3000 항목), 병렬로 모든 항목을 구문 분석하면 너무 많은 메모리가 필요합니다. 약속 라이브러리에 동시성 제한을 추가하고 메모리가 부족한 경우 (/ guard)는 정말 쉽지 않았습니다.
하지만 mongodb가 bulkWrite 기능을 제공하기 때문에 db upserts도 최적화하고 싶습니다. 한 번에 모든 항목을 구문 분석하고 대량으로 작성할 수 없으므로 원래 개체 목록을 약속과 함께 구문 분석되는 작은 집합으로 분할 한 다음 해당 집합의 결과 배열을 promisified bulkWrite로 전달해야합니다. 목록 항목 인 경우 나머지 세트에 대해 반복됩니다.
저는 약속의 작은 세트를 구조화 할 수있는 방법을 고심하고 있습니다. 그래서 Promise.all ([set1Bulk] [set2Bulk]) 같은 시간에 한 세트의 parseSomeItems-BulkUpsertThem 만 수행합니다.), 어디 set1Bulk 병렬 파서 약속 다른 배열입니다?), 모든 의사 코드 도움을 주시면 감사하겠습니다 (하지만 내가 차이를 만드는 경우 사용하고 있습니다). 몽구스를 사용하여 기본 nodejs-MongoDB의 드라이버 경우
아 물론 재귀! 내 뇌가 약속의 긴 사슬을 만들려고 서클에서 뛰어 다니고있었습니다 ... 감사합니다. 무리를지었습니다. 이것은 정확히 내가 찾고 있었던 것입니다. <3 – usagidon