Назад | Перейти на главную страницу

Как быстро создать новые экземпляры сложной базы данных MySQL?

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

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

Есть ли у кого-нибудь идеи, как я могу сделать это быстрее или эффективнее?

Вы можете попробовать выполнить запрос как «массовую транзакцию», чтобы пропустить проверки. Будьте осторожны, это может привести к дублированию индексов и нарушению проверки согласованности, если вы не будете осторожны.

Нет возможности увеличить эту скорость, например, до 5 секунд. Я думаю, что вам нужно использовать некоторую логику очереди и создать такой BD в фоновом режиме. Для клиентов это будет просто: «Идет создание БД»

Спасибо всем за предложения, в конечном итоге я нашел довольно хорошее решение и хотел бы поделиться им здесь для будущих читателей!

В конечном итоге я смог настроить нашу архитектуру базы данных, объединив / удалив некоторые таблицы, что упростило общий дизайн и сократило время, необходимое для запуска сценария создания. Я также переписал наш сценарий создания, чтобы он выполнял один запрос для каждой таблицы вместо трех (один для создания таблицы, второй для изменения таблицы для добавления индексов, третий для создания внешних ключей). Эти две вещи действительно значительно улучшили запуск сценария, он увеличился с примерно 50 секунд в среднем до 8 секунд!

Еще одна вещь, которую мы сделали, которая имеет большое значение для взаимодействия с пользователем, - это создание службы, которая работает независимо на одном из наших серверов и не будет делать ничего, кроме создания новых баз данных, которые остаются пустыми в ожидании регистрации нового пользователя. Когда пользователь регистрируется, его учетная запись просто назначается следующей доступной пустой базе данных. Мы настроили его так, чтобы служба создания БД не опережала более чем на 100% по сравнению с потребностями нашей учетной записи. Этот дизайн сократил время ожидания пользователя при регистрации до 1 или 2 секунд. Все это кажется немного "взломанным", но в конечном итоге это огромное улучшение!