Как сохранить отдельные данные пользователя в моей базе данных? - PullRequest
1 голос
/ 22 апреля 2011

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

Мой первый вопрос касается разделения данных. Когда пользователь регистрируется на моем сайте, он сможет хранить данные, импортированные из другого источника. Количество данных (количество строк) для каждого пользователя будет расти очень быстро. Если я сохраню все пользовательские данные в одной базе данных, я ожидаю очень быстрых проблем с производительностью Чтобы решить эту проблему, я планировал создать новую базу данных для каждого зарегистрированного пользователя. Это может произойти на лету с помощью какого-либо сценария или другого программного решения. Это возможно? Кто-нибудь знает какой-либо шаблон проектирования, который решает эту проблему?

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

Спасибо.

1 Ответ

2 голосов
/ 22 апреля 2011

Проблемы с производительностью БД обычно сводятся к плохой индексации, нехватке памяти и / или плохим запросам SQL. Одна БД на пользователя не решает эту проблему, она слишком сложна. Для этого не существует шаблона проектирования, просто есть надежное оборудование с достаточным объемом памяти и хорошо нормализованная база данных с хорошо проиндексированными столбцами. Задание правильных индексов относительно тривиально, как правило, достаточно просто поместить его в столбцы, которые имеют ключевые ограничения, и столбцы, включенные в предложения WHERE. Hibernate / JPA, в свою очередь, генерирует в целом хорошо оптимизированные SQL-запросы и предлагает возможности кэширования второго уровня.

...