Алгоритм ускорения синхронизации базы c - удаление отсутствующих записей node.js - PullRequest
0 голосов
/ 11 марта 2020

У меня есть таблица моста, которая имеет следующую схему, которая используется для привязки (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
  }
})

Любые идеи полезны, заранее спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...