Майк Шеррилл 'Cat Recall' дал отличный ответ . Я добавлю просто один пример: Postgres .
Кластер = Установка Postgres
Когда вы устанавливаете Postgres на машине, эта установка называется cluster . «Кластер» здесь не подразумевается в аппаратном смысле , когда несколько компьютеров работают вместе. В Postgres cluster относится к тому факту, что вы можете иметь несколько несвязанных баз данных, работающих и работающих на одном и том же ядре сервера Postgres.
Слово cluster также определяется SQL Standard так же, как в Postgres. Следование стандарту SQL является основной целью проекта Postgres.
Спецификация SQL-92 гласит:
Кластер - это определенная реализацией коллекция каталогов.
и
Ровно один кластер связан с SQL-сессией
Это тупой способ сказать, что кластер является сервером базы данных (каждый каталог является базой данных).
Кластер> Каталог> Схема> Таблица> Столбцы и строки
Итак, как в Postgres, так и в стандарте SQL мы имеем следующую иерархию содержимого:
- Компьютер может иметь один или несколько кластеров.
- Сервер базы данных - это кластер .
- Кластер имеет каталогов . (Каталог = База данных)
- Каталоги имеют схемы . (Схема = пространство имен таблиц и граница безопасности)
- Схемы имеют таблиц .
- Таблицы имеют строк .
- Строки имеют значения , определяемые столбцы .
Эти значения представляют собой бизнес-данные, которые интересуют ваши приложения и пользователей, например имя человека, срок оплаты счета, цена продукта, высокий балл игрока. Столбец определяет тип данных значений (текст, дата, число и т. Д.).
Несколько кластеров
Эта диаграмма представляет один кластер. В случае Postgres вы можете иметь более одного кластера на хост-компьютер (или виртуальную ОС). Обычно используется несколько кластеров для тестирования и развертывания новых версий Postgres (например: 9.0 , 9.1 , 9.2 , 9.3 , 9,4 , 9,5 ).
Если у вас было несколько кластеров, представьте дубликат диаграммы выше.
Различные номера портов позволяют нескольким кластерам одновременно работать и работать параллельно. Каждому кластеру будет присвоен свой номер порта. Обычный 5432
является только значением по умолчанию и может быть установлен вами. Каждый кластер прослушивает собственный назначенный порт для входящих подключений к базе данных.
Пример сценария
Например, в компании могут быть две разные команды разработчиков программного обеспечения. Один пишет программное обеспечение для управления складами, а другая команда создает программное обеспечение для управления продажами и маркетингом. У каждой команды разработчиков есть своя собственная база данных, которая, к счастью, не знает о других.
Но команда ИТ-специалистов приняла решение запустить обе базы данных на одном компьютере (Linux, Mac и т. Д.). Так что на этой коробке они установили Postgres. Итак, один сервер баз данных (кластер баз данных). В этом кластере они создают два каталога, каталог для каждой команды разработчиков: один с именем «склад» и один с именем «продажи».
Каждая команда разработчиков использует множество десятков таблиц с различными целями и ролями доступа. Таким образом, каждая команда разработчиков организует свои таблицы в схемы. По совпадению, обе команды разработчиков проводят отслеживание учетных данных, поэтому у каждой команды есть схема с именем «учет». Использование одного и того же имени схемы не является проблемой, поскольку каждый из каталогов имеет свое собственное пространство имен , поэтому нет конфликтов.
FuБолее того, каждая группа в конечном итоге создает таблицу для целей бухгалтерского учета под названием «бухгалтерская книга». Опять же, нет конфликта имен.
Вы можете думать об этом примере как об иерархии ...
- Компьютер (аппаратный блок или виртуализированный сервер)
Postgres 9.2
кластер (установка)
warehouse
каталог (база данных)
inventory
схема
accounting
схема
ledger
стол
- [… некоторые другие таблицы]
sales
каталог (база данных)
selling
схема
accounting
схема (совпадает с тем же именем, что и выше)
ledger
таблица (совпадает с тем же именем, что и выше)
- [… некоторые другие таблицы]
Postgres 9.3
кластер
- [… другие схемы и таблицы]
Программное обеспечение каждой команды разработчиков устанавливает соединение с кластером. При этом они должны указать, какой каталог (база данных) принадлежит им. Postgres требует подключения к одному каталогу, но вы не ограничены этим каталогом. Этот начальный каталог является просто значением по умолчанию, используемым, когда ваши операторы SQL опускают имя каталога.
Так что, если команде разработчиков когда-нибудь понадобится доступ к таблицам другой команды, они могут сделать это , если администратор базы данных предоставил им привилегии для этого. Доступ осуществляется с явным присвоением имени в шаблоне: catalog.schema.table . Таким образом, если команде «хранилища» требуется просмотреть бухгалтерскую книгу другой группы («отдела продаж»), они пишут операторы SQL с sales.accounting.ledger
. Чтобы получить доступ к своей книге, они просто пишут accounting.ledger
. Если они обращаются к обоим регистрам в одном и том же фрагменте исходного кода, они могут избежать путаницы, включив свое собственное (необязательное) имя каталога, warehouse.accounting.ledger
против sales.accounting.ledger
.
Кстати ...
Вы можете услышать слово схема , используемое в более общем смысле, означающем весь дизайн структуры таблицы конкретной базы данных. В отличие от этого, в стандарте SQL слово означает конкретно определенный уровень в иерархии Cluster > Catalog > Schema > Table
.
Postgres использует как слово база данных , так и каталог в различных местах, таких как команда CREATE DATABASE .
Не вся система баз данных обеспечивает эту полную иерархию Cluster > Catalog > Schema > Table
. У некоторых есть только один каталог (база данных). У некоторых нет схемы, только один набор таблиц. Postgres - исключительно мощный продукт.