Я запускаю процесс ETL и потоковые данные в таблицу MySQL.Улучшение скорости работы SQL 'Update' - перерыв в Insert/Delete?
Теперь он записывается через веб-соединение (довольно быстрое), так что это может быть узким местом.
В любом случае, это базовая функция вставки/обновления. Это список идентификаторов в качестве первичного ключа/индекса ... и затем несколько атрибутов.
Если новый идентификатор найден, вставьте, в противном случае, обновите ... вы получите эту идею.
Выполнение функции «обновление, вставка», основанной на идентификаторе (индексируется), занимает 13 строк в секунду (что кажется довольно ужасным, верно?). Это сравнивает 1000 строк с базой данных 250 тыс. Записей для контекста.
При выполнении «чистой» вставки все приближается, для сравнения, уже ускоряет процесс до 26 строк в секунду.
Дело с чистым подходом «вставки» заключается в том, что я могу иметь 20 параллельных соединений «вставки» сразу ... (20 максимально допустимо для веб-хоста) ... тогда как любая функция «обновления» не может иметь никаких параллели работают.
Таким образом, 26 x 20 = 520 г/с. Довольно больше 13 р/с, особенно если я смогу выстроить что-то, что позволит еще большему количеству данных проходить параллельно.
Мой вопрос ... учитывая огромное преимущество вставки против обновления, есть способ дублировать функциональность «обновления» (я хочу, чтобы только последняя вставка данного идентификатора выдержала) .... сделав массивную вставку, а затем запустив функцию удаления после факта, который удаляет повторяющиеся идентификаторы, которые не являются «новейшими»?
Это что-то простое в реализации или что-то, что появляется часто?
Что еще я могу сделать, чтобы этот процесс обновления был быстрее? Я знаю, что избавиться от «веб-соединения» между инструментом ETL и DB - это начало, но что еще? Похоже, что это будет довольно распространенная проблема.
В конечном счете есть 20 столбцов, максимум, вероятно, varchar (50) ... Должен ли я получать намного больше 13 строк, обработанных/секунд?
Что представляет собой ваш код «update, else insert» в настоящее время? –