Ускоренный метод миграции и обработки данных между базами данных MySQL

Я пытаюсь нормализовать схему. У меня есть одна база данных MySQL, используемая в CMS, и схема данных очень проблематична. Например, чтобы получить все свойства и подчиненные свойства объекта, мне нужно запросить несколько таблиц, а также выполнить некоторую обработку после DB. Есть пара под-свойств, которые хранятся в строке JSON в одном поле, и когда вы анализируете этот JSON, он дает вам идентификаторы внешнего ключа для другой таблицы в БД. Это что-то вроде беспорядка: разговаривать с БД, потом обрабатывать вещи, а потом снова разговаривать с БД.

Я пытаюсь создать сценарий, который может быть запущен по расписанию cron, который будет брать данные из существующей системы, обрабатывать их и помещать в другую базу данных с нормализованной схемой.

Я изначально создал PHP-скрипт, который делает это, но только для одной категории (из ~800), содержащей только 350 продуктов (из 100k), выполнение скрипта занимает около 5 минут. Мне нужно что-то быстрее. Мой скрипт использует библиотеку ADODB для взаимодействия с MySQL.

Вот несколько вариантов (поскольку формат "вопрос / ответ"), и мне любопытно, может ли один из них быть экспоненциально лучше по производительности:

  • сырой PHP (без библиотек)
  • PHP с Phalcon
  • Perl
  • Node.js
  • что-то другое..

1 ответ

Решение

Я думаю, что вы можете написать некоторые "переводящие" процедуры в самом mysql для обработки старых данных и генерации новых записей напрямую. Это может быть быстрее, чем другие решения.

Если производительность запросов не является проблемой, вы можете просто создать некоторые представления (процедуры, функции) на основе текущей схемы и упростить дальнейшее программирование. Некоторые материализованные представления могут реально помочь улучшить производительность.

Если вам нужно "преобразовать" огромную базу данных за пределы MySQL, вы можете сначала записать свои "результаты" в файлы на диске (текстовые или sql) и импортировать их в MySQL после того, как все ваши "данные" будут преобразованы.

Другие вопросы по тегам