MySQL прочитать -> процесс -> обновить, оптимизировать для больших данных

0

У меня простая задача. Прочитайте данные из mysql → выполните некоторую операцию (не очень тяжелую) → затем обновите результат в mysql DB. С 20 различными таблицами в базе данных (~ 600000 строк каждая).

Я написал скрипт python, используя ThreadPoolExecutor(max_workers=20) чтобы оптимизировать общее время выполнения, но занимает около 40 часов. Я хочу оптимизировать его для следующего запуска.

Я пытался запустить несколько экземпляров кода, но производительность не очень значительна. Есть ли лучший подход к быстрому выполнению задачи, например, распределенный код или что-то, о чем кто-либо знает?

Минималистский алгоритм кода

conn.autocommit = True
ThreadPoolExecutor(max_workers=20)
  1. читать данные и обрабатывать кортеж кортежем следующим образом
  2. обнаруживать lanugage из предложений с помощью TextBlob(). detect_language()
  3. обновить обратно в таблицу
  • 0
    Ответ на этот вопрос лежит где-то между «да, тривиально» и «нет, 40 часов - лучшее, что вы можете сделать». Какой именно это будет, будет зависеть от того, что именно вы делаете, поэтому вы должны поделиться (соответствующими и минимизированными частями) своего кода, в противном случае, к сожалению, мы не сможем вам чем-то помочь.
  • 0
    Профилируйте вещь. Если вы не знаете, где вы тратите большую часть времени, как вы можете сделать это лучше? Может быть, его mysql, может быть, его код обработки. Также GIL влияет только на многопоточность, вы можете многопроцессорным.
Показать ещё 1 комментарий
Теги:
optimization
distributed-computing

1 ответ

1

Самый быстрый способ - создавать вставки и фиксировать каждые несколько тысяч строк. Напишите все в файл. Удаление индексов загружает данные с помощью клиента mysql и индекса creata. Оптимизируйте сервер для массовых операций.

Параллельность в Python НЕ работает. Параллелизм в python не работает правильно

  • 0
    LOAD DATA INFILE быстрый способ импортировать данные с MySQL - это использовать LOAD DATA INFILE dev.mysql.com/doc/refman/5.7/en/load-data.html.
  • 0
    положить данные в файл, а затем загрузить файл в БД, не будет ли это постоянной операцией? Я использовал LOAD DATA INFILE раньше, но я не уверен, что это подходящий вариант использования здесь. К тому времени, когда я запишу данные в файл, я смогу записать в базу данных напрямую, только мои мысли.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню