2015-05-11 2 views
1

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

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

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

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

  • сырье PHP (нет библиотеки)
  • PHP с Phalcon
  • Perl
  • Node.js
  • что-то еще ..
+0

Возможно, вы захотите предоставить типичный пример кода, который вы используете в настоящее время. Люди могут предоставить стратегии оптимизации для того, что у вас есть. – Uueerdo

ответ

1

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

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

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