Мне нужно перенести довольно большую инсталляцию форума из одной системы (кастомная, 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
в пользовательской таблице
- При миграции пользователей загружайте их в порядке даты создания и отслеживайте самую последнюю дату (в другой таблице БД). Это позволит системе выбрать, с чего она остановилась при следующем запуске
- То же относится и к темам
- При выполнении миграции сначала получите все, «созданное до сохраненной даты, но измененное после нее», и обновите записи в базе данных с измененной информацией. Как только это будет сделано, обработайте вещи, созданные с тех пор
Мои извинения за такой открытый вопрос. Здесь задействовано много факторов, и на самом деле у меня пока нет конкретных вопросов. Я действительно просто ищу любые мысли / предложения от людей, которые, возможно, должны были обращаться с чем-то подобным в прошлом. Любые идеи о том, как лучше обращаться с вещами, вещами, которые мне не хватает, или крайними случаями, на которые я должен обратить внимание.
Редактировать: я не могу понять, как сделать это вики. Если кто-то может преобразовать это для меня или сказать мне, как, я был бы счастлив сделать это. У него, очевидно, нет единственного правильного ответа, поэтому, вероятно, его следует пометить как таковой.