У меня проблема с эффективностью на руках, и я ищу способы ее решения. Вот так:Эффективно синхронизировать потоковый ввод с большой базой данных SQL
- У меня есть потоковые данные на основе строк, поступающие в систему из онлайн-источника, каждый с уникальным
id
. - У меня есть база данных SQL с существующими данными на основе строк, индексированная на
id
. - Мне нужно обновить базу данных SQL новой потоковой передачей данных, если она отличается от существующих данных уже в базе данных.
Очевидное решение состоит в:
- просматривать полученные Row
- Read соответствующую строку в базе данных
- Если отличается данных, обновление базы данных
Большое число округло поездки делают этот алгоритм неимоверно медленным.
Альтернативное решение, которое я имею, - это прочитать всю базу данных SQL в памяти и сравнить с новыми входящими данными. Это исключает круглые поездки, но требуемая память делает это также недопустимым.
Итак, какие у меня альтернативы?
Дозирование представляется одним из решений. Либо партия на удобной единице времени (например, 10 секунд), либо партия на удобном количестве записей (скажем, 100). Тогда сравнения могут быть сделаны в базе данных, и все будет быстрее. –
@GordonLinoff Получается, у меня есть удачная оптимизация. Поскольку я просто обновляю базу данных новыми данными, я могу выпустить REPLACE вместо INSERT и позволить базе данных обрабатывать перезапись. Нет необходимости в круглых поездках и очень быстро. – frivat