Postgresql - одна база данных для каждого или одна база данных для каждого клиента - PullRequest
3 голосов
/ 11 мая 2010

Я работаю над веб-бизнес-приложением, в котором каждому клиенту необходимо иметь свои собственные данные (например, модель типа basecamphq.com). Для масштабируемости и простоты обновления я бы предпочел иметь одну базу данных где каждый клиент получает отфильтрованную версию данных. Проблема заключается в том, чтобы гарантировать, что они останутся изолированными от своих собственных данных. Попытка применить его в коде кажется катастрофой, ожидающей своего появления. Я знаю, что у Oracle есть способ добавить предложение where к каждому запросу на основе идентификатора входа, но есть ли в Postgresql что-нибудь подобное?

Если нет, могу ли я использовать другой шаблон проектирования (например, создание представления каждой таблицы для каждого клиента, который фильтрует)?

В худшем случае, каковы издержки производительности / памяти при наличии 1000 100M баз данных по сравнению с одной базой данных 1 ТБ? Мне нужно будет предоставить функции резервного копирования / восстановления для каждого клиента, что очень просто для одной базы данных, но немного сложнее, если они делятся базой данных с другими клиентами.

Ответы [ 2 ]

1 голос
/ 11 мая 2010

Возможно, вы захотите добавить Veil к вашей установке PostgreSQL.

0 голосов
/ 11 мая 2010

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

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

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