Ускоренный метод миграции и обработки данных между базами данных 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 после того, как все ваши "данные" будут преобразованы.