Sobes.tech
Senior
43

Kaip pagreitinti duomenų keitimo operacijas lentelėje su milijonu naudotojų, iš kurių tik tūkstantis yra aktyvūs?

Įmonės kur klausė
СБЕРСБЕР

Atsakymas iš AI

sobes.tech AI

Чтобы ускорить операции изменения данных в таблице с миллионом пользователей, из которых активных только тысяча, стоит сфокусироваться на оптимизации именно для активных пользователей:

  • Используйте индексы по полям, которые позволяют быстро находить активных пользователей (например, индекс по полю active = true).
  • Выполняйте обновления только по отфильтрованному набору активных пользователей, чтобы не трогать всю таблицу.
  • Рассмотрите возможность партиционирования таблицы, выделив активных пользователей в отдельный партицион или таблицу.
  • Используйте пакетные обновления (batch updates), чтобы уменьшить количество транзакций.
  • Если возможно, применяйте ленивые обновления или обновляйте данные асинхронно.

Пример на SQL:

UPDATE users
SET last_login = NOW()
WHERE active = TRUE;

В Java можно использовать batch update с JDBC:

String sql = "UPDATE users SET last_login = ? WHERE id = ?";
try (PreparedStatement ps = connection.prepareStatement(sql)) {
    for (User user : activeUsers) {
        ps.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
        ps.setLong(2, user.getId());
        ps.addBatch();
    }
    ps.executeBatch();
}