Moved batching logic inside the members importer module

no issue

- This way importer is more self contained and controller logic doesn't have to know about batch sizes and other unecessary variables
This commit is contained in:
Nazar Gargol 2020-08-13 20:31:11 +12:00
parent c434666ba2
commit 78b4dff656
2 changed files with 19 additions and 16 deletions

View File

@ -596,19 +596,14 @@ module.exports = {
})); }));
} }
const CHUNK_SIZE = 100;
const memberBatches = _.chunk(sanitized, CHUNK_SIZE);
return Promise.map(memberBatches, async (membersBatch) => {
return doImport({ return doImport({
membersBatch, members: sanitized,
allLabelModels, allLabelModels,
importSetLabels, importSetLabels,
imported, imported,
invalid, invalid,
createdBy createdBy
}); });
});
}).then(() => { }).then(() => {
// NOTE: grouping by context because messages can contain unique data like "customer_id" // NOTE: grouping by context because messages can contain unique data like "customer_id"
const groupedErrors = _.groupBy(invalid.errors, 'context'); const groupedErrors = _.groupBy(invalid.errors, 'context');

View File

@ -124,11 +124,19 @@ const doImport = async ({membersBatch: members, allLabelModels, importSetLabels,
try { try {
// TODO: below inserts most likely need to be wrapped into transaction // TODO: below inserts most likely need to be wrapped into transaction
// to avoid creating orphaned member_labels connections // to avoid creating orphaned member_labels connections
const CHUNK_SIZE = 5000;
const chunkedMembers = _.chunk(mappedMemberBatchData, CHUNK_SIZE);
for (const data of chunkedMembers) {
await db.knex('members') await db.knex('members')
.insert(mappedMemberBatchData); .insert(data);
}
const chunkedLebelAssociations = _.chunk(mappedMembersLabelsBatchAssociations, CHUNK_SIZE);
for (const data of chunkedLebelAssociations) {
await db.knex('members_labels') await db.knex('members_labels')
.insert(mappedMembersLabelsBatchAssociations); .insert(data);
}
imported.count += mappedMemberBatchData.length; imported.count += mappedMemberBatchData.length;
} catch (error) { } catch (error) {