Перенос больших форумных данных из одной системы в другую - PullRequest
2 голосов
/ 23 августа 2011

Мне нужно перенести довольно большую инсталляцию форума из одной системы (кастомная, MS SQLServer) в другую (vbulletin, MySQL). В целевой системе есть несколько различных сценариев импорта, на которые я планирую взглянуть, чтобы получить идеи, но я надеюсь, что смогу получить здесь некоторые рекомендации по некоторым из его аспектов.

Стоит отметить:

  • Оригинальная система использует Microsoft SQLServer. Новая система использует MySQL (схемы не похожи)
    • Может ли PHP общаться с SQLServer? Если нет, возможно, используйте Java для выполнения миграции, поскольку он может общаться с обоими? (новая система написана на php, и мы хотели бы сохранить весь код на одном языке, если это возможно)
  • Количество данных составляет порядка 13 миллионов сообщений и 650 тыс. Участников.
    • При необходимости мы можем удалять участников (удаляя тех, кто не вошел в систему за последние X лет и не имеет сообщений в активных темах)
    • При необходимости мы можем удалять темы (удаляя те, у которых не было новых сообщений за последние X лет)
    • Даже после обрезки у нас все еще может быть порядка 7,5 миллионов сообщений

Вещи, которые, я думаю, могут вызвать проблемы, включают:

  • Я не уверен, смогу ли я сохранить идентификаторы (сообщения или пользователя) из старой системы в новой.
  • Я, очевидно, не могу загрузить все 13-метровые записи в память из старой базы данных, обработать их и затем записать в новую базу данных
  • Я хочу иметь возможность запустить второй перенос данных позже, чтобы получить какие-либо новые данные после первоначального импорта (чтобы мы могли запустить длительный импорт для резервной копии основной базы данных, а затем выполнить импорт «всего остального», когда пора выключать старую систему)

Моя текущая мысль - сделать что-то вроде:

  • Добавить столбец old_user_id в новую таблицу пользователей базы данных
  • Перенесите пользователей из старой базы данных, поместив их исходный идентификатор пользователя в новый столбец
  • Загрузка потоков из старой базы данных в пакетном порядке по X и вставка их в новую базу данных с использованием сопоставления old_user_id -> new_user_id в пользовательской таблице
  • При миграции пользователей загружайте их в порядке даты создания и отслеживайте самую последнюю дату (в другой таблице БД). Это позволит системе выбрать, с чего она остановилась при следующем запуске
  • То же относится и к темам
  • При выполнении миграции сначала получите все, «созданное до сохраненной даты, но измененное после нее», и обновите записи в базе данных с измененной информацией. Как только это будет сделано, обработайте вещи, созданные с тех пор

Мои извинения за такой открытый вопрос. Здесь задействовано много факторов, и на самом деле у меня пока нет конкретных вопросов. Я действительно просто ищу любые мысли / предложения от людей, которые, возможно, должны были обращаться с чем-то подобным в прошлом. Любые идеи о том, как лучше обращаться с вещами, вещами, которые мне не хватает, или крайними случаями, на которые я должен обратить внимание.

Редактировать: я не могу понять, как сделать это вики. Если кто-то может преобразовать это для меня или сказать мне, как, я был бы счастлив сделать это. У него, очевидно, нет единственного правильного ответа, поэтому, вероятно, его следует пометить как таковой.

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

Может ли PHP общаться с SQLServer? Да ссылка здесь

1 голос
/ 23 августа 2011

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

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

Также вы можете проверить http://php.net/manual/en/book.mssql.php относительноВаш php vs mssql вопрос.Это может избавить вас от многих проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...