После этого комментария к одному из моих вопросов, я думаю, что лучше использовать одну базу данных с X-схемами или наоборот.
Моя ситуация: я разрабатываю веб-приложение, в котором, когда люди регистрируются, я создаю (на самом деле) базу данных (нет, это не социальная сеть: каждый должен иметь доступ к своим данным и никогда не видеть данные другой пользователь).
Так я использовал для предыдущей версии моего приложения (которая все еще работает на MySQL): через API Plesk для каждой регистрации я делаю:
- Создать пользователя базы данных с ограниченными правами;
- Создание базы данных, к которой может обращаться только предыдущий созданный пользователь и суперпользователь (для обслуживания)
- Заполнить базу данных
Теперь мне нужно сделать то же самое с PostgreSQL (проект становится зрелым, а MySQL ... не удовлетворяет всем требованиям).
Мне нужно, чтобы все резервные копии баз данных / схем были независимыми: pg_dump отлично работает в обоих направлениях и одинаково для пользователей, которые могут быть настроены для доступа только к одной схеме или одной базе данных.
Итак, если вы являетесь более опытным пользователем PostgreSQL, чем я, что, по вашему мнению, является лучшим решением для моей ситуации и почему?
Будут ли различия в производительности при использовании базы данных $ x вместо схем $ x? И какое решение будет лучше поддерживать в будущем (надежность)?
Все мои базы данных / схемы будут всегда иметь одинаковую структуру!
Для проблемы с резервным копированием (с использованием pg_dump), возможно, лучше использовать одну базу данных и несколько схем, создавая дампы сразу всех схем: восстановление будет довольно простой загрузкой основного дампа на компьютере разработчика, а затем выгрузкой и восстановлением только схемы необходимо: есть еще один шаг, но вывод всех схем кажется быстрее, чем вывод их по одному.
ОБНОВЛЕНИЕ 2012
Ну, структура приложения и дизайн сильно изменились за последние два года. Я все еще использую подход one db with many schemas
, но у меня есть одна база данных для каждой версии моего приложения:
Db myapp_01
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Db myapp_02
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Для резервных копий я регулярно выгружаю каждую базу данных, а затем перемещаю резервные копии на сервер разработки.
Я также использую резервное копирование PITR / WAL, но, как я уже говорил, маловероятно, что мне придется восстанавливать всю базу данных одновременно ... так что, вероятно, она будет отклонена в этом году (в моей ситуации это не лучший подход).
С тех пор подход one-db-many-schema работал очень хорошо, даже если структура приложения полностью изменилась:
Я почти забыл: все мои базы данных / схемы будут всегда иметь одинаковую структуру!
... теперь каждая схема имеет свою собственную структуру, которая динамически изменяется, реагируя на поток данных пользователя.