Майк Шеррилл 'Cat Recall' дал отличный ответ . Я добавлю просто один пример: Postgres .
Кластер = Установка Postgres
Когда вы устанавливаете Postgres на машине, эта установка называется cluster . «Кластер» здесь не подразумевается в аппаратном смысле , когда несколько компьютеров работают вместе. В Postgres cluster относится к тому факту, что вы можете иметь несколько несвязанных баз данных, работающих и работающих на одном и том же ядре сервера Postgres.
Слово cluster также определяется SQL Standard так же, как в Postgres. Следование стандарту SQL является основной целью проекта Postgres.
Спецификация SQL-92 гласит:
Кластер - это определенная реализацией коллекция каталогов.
и
Ровно один кластер связан с SQL-сессией
Это тупой способ сказать, что кластер является сервером базы данных (каждый каталог является базой данных).
Кластер> Каталог> Схема> Таблица> Столбцы и строки
Итак, как в Postgres, так и в стандарте SQL мы имеем следующую иерархию содержимого:
- Компьютер может иметь один или несколько кластеров.
- Сервер базы данных - это кластер .
- Кластер имеет каталогов . (Каталог = База данных)
- Каталоги имеют схемы . (Схема = пространство имен таблиц и граница безопасности)
- Схемы имеют таблиц .
- Таблицы имеют строк .
- Строки имеют значения , определяемые столбцы .
Эти значения представляют собой бизнес-данные, которые интересуют ваши приложения и пользователей, например имя человека, срок оплаты счета, цена продукта, высокий балл игрока. Столбец определяет тип данных значений (текст, дата, число и т. Д.).
![Diagram showing nesting boxes representing how connecting on a port gets you to cluster (a database server) which contains one or more Catalogs (a database) each of which contains one or more Schemas (a namespace) each of which contains tables each of which has rows.](https://i.stack.imgur.com/FqyMq.png)
Несколько кластеров
Эта диаграмма представляет один кластер. В случае 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 - исключительно мощный продукт.