Подтвердить что ты не робот

Postgresql один db с несколькими схемами против нескольких db с одной схемой

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

ТИА.

4b9b3361

Ответ 1

Если производительность важна, нет никакой замены для сравнения вашего конкретного варианта использования. Если это не так важно, тогда идите с более простым администрированием! Аппаратное обеспечение дешево по сравнению со временем программиста /DBA и по сравнению с ожидаемым более высоким уровнем аварийности при более сложной настройке. Не говоря уже о компьютерах следовать закону Мура, но в тот день упорно отказывается, чтобы получить больше.

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

  • Каждое подключение относится к одной базе данных AFAIK. В PostgreSQL установка/отключение соединения стоит дорого.

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

Однако я могу видеть контрпример, который может применяться. Каждая база данных хранится в одном каталоге. Это делает разделение баз данных между файловыми системами - и, следовательно, дисковыми массивами - очень просто, используя обычные инструменты файловой системы (например, точки монтирования и/или символические ссылки). Разделение баз данных на несколько массивов очень маловероятно, чтобы превзойти один большой массив RAID10 с таким же количеством дисков, но обеспечит лучшую изоляцию (база данных A, выполняющая огромный запрос, не будет влиять на базу данных B). Однако, проверьте документацию планировщика OS IO; помните, что каждое соединение PostgreSQL получает свой собственный бэкэнд-процесс, поэтому процедура очередности в отношении процесса может сделать это лучше.

Обратите внимание, что вы также можете сегментировать данные через файловые системы с помощью PostgreSQL CREATE TABLESPACE и друзей, поэтому вышеупомянутое может быть выполнено также с помощью схем.

Ответ 2

По производительности, это будет полностью зависеть от вашего приложения.

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

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

В большинстве случаев схемы в одной базе данных победят. Довольно распространенное решение - это гибрид, базы данных X и схемы Y.

Ответ 3

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

Ответ 4

Несколько баз данных не имеют преимуществ по производительности над несколькими схемами (пространствами имен), которые я могу видеть (за исключением, возможно, если у вас невероятно большое количество таблиц). CREATE TABLESPACE позволяет вам размещать все, что угодно, где бы вы ни находились в файловой системе, поэтому физическое хранилище может контролироваться вами в любом случае.

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