2010-05-11 6 views
3

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

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

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

ответ

2

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

+0

Это похоже, что он может работать. Для этого требуется отдельный вход для каждого пользователя, что затруднит объединение пулов. Есть ли у вас опыт работы на рабочем месте? –

+0

@John: Нет, не в производстве. Несколько месяцев назад я занимался консалтинговым концертом для компании, и они рассмотрели возможность, но решили пойти другим путем. –

+0

Я думаю, вам придется жить с каждым клиентом, иначе любая песочница будет бесполезной, так как это будет клиентская или прикладная сторона, и прямой доступ сломает вашу песочницу. – MkV

0

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

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

+0

Я нашел эту презентацию (http://aac2009.confreaks.com/06-feb-2009-14-30-writing-multi-tenant-applications-in-rails-guy-naor.html) о том, как basecamp разделил свою схему. То, как они это делали, это фильтр до и после контроллера, который установил бы путь поиска. Мое приложение записывается в java, используя пул соединений apache commons, поэтому я не уверен, что он жизнеспособен. Я проверю и посмотрю, какие у меня варианты –

Смежные вопросы