У меня есть таблица моста, которая имеет следующую схему, которая используется для привязки (M2M) велосипедов к пользователям:
user_bikes
id: int(10)
bike_id: int(10)
user_id: int(10)
На на другом сервере я добавил дополнительные таблицы bike_groups
и bike_group_bikes
для групповых велосипедов (M2M), а затем группы велосипедов связываются с пользователями:
bike_groups
id: int(10)
bike_group_bikes
id: int(10)
bike_id: int(10)
group_id: int(10)
bike_group_users
id: int(10)
group_id: int(10)
user_id: int(10)
Я пытаюсь поддерживать синхронизацию между 2 таблицы (предположим, что каждая группа содержит только один велосипед, алгоритм работает правильно, он просто медленный), используя node.js. Я делаю 2 запроса, чтобы получить все записи (они не особенно медленные), затем сравниваю их, чтобы увидеть, какие из них необходимо удалить ( эта часть медленная ). Операция занимает около 4 минут, чтобы завершить около 100 тыс. Записей. Мне интересно, есть ли повышение эффективности, которое может ускорить это, поскольку это кажется довольно медленным. Вот мой код:
let existingBikeGroupUsers = existingBikeGroupUsers = await models.BikeGroupUser.find({}, {
embed: 'BikeGroup.BikeGroupBike'
})
// Delete all records missing in original db
const [userBikes] = await db.query('SELECT bike_id, user_id FROM user_bikes);')
const bguIdsToDelete = []
for (const bgu of existingBikeGroupUsers) {
let stillExists = userBikes.some(userBike => bgu.user_id === userBike.user_id && bgu.BikeGroup.BikeGroupBikes.some(bgb => bgb.bike_id === userBike.bike_id))
if (!stillExists) bguIdsToDelete.push(bgu.id)
}
await models.ContactGroupAlert.destroy({
id: {
$in: bguIdsToDelete
}
})
Любые идеи полезны, заранее спасибо !!