Mike Sherrill 'Cat Recall' gab eine ausgezeichnete Antwort . Ich füge nur ein Beispiel hinzu: Postgres .
Cluster = Eine Postgres-Installation
Wenn Sie Postgres auf einem Computer installieren, wird diese Installation als Cluster bezeichnet . "Cluster" ist hier nicht im Hardware-Sinne gemeint, wenn mehrere Computer zusammenarbeiten. In Postgres bezieht sich Cluster auf die Tatsache, dass mehrere nicht verwandte Datenbanken mit derselben Postgres-Server-Engine ausgeführt werden können.
Das Wort Cluster wird vom SQL- Standard auf dieselbe Weise wie in Postgres definiert. Die enge Einhaltung des SQL-Standards ist ein vorrangiges Ziel des Postgres-Projekts.
Die SQL-92- Spezifikation lautet:
Ein Cluster ist eine implementierungsdefinierte Sammlung von Katalogen.
und
Einer SQL-Sitzung ist genau ein Cluster zugeordnet
Das ist eine stumpfe Art zu sagen, dass ein Cluster ein Datenbankserver ist (jeder Katalog ist eine Datenbank).
Cluster> Katalog> Schema> Tabelle> Spalten und Zeilen
Sowohl in Postgres als auch im SQL Standard haben wir diese Containment-Hierarchie:
- Ein Computer kann einen oder mehrere Cluster haben.
- Ein Datenbankserver ist ein Cluster .
- Ein Cluster verfügt über Kataloge . (Katalog = Datenbank)
- Kataloge haben Schemata . (Schema = Namespace der Tabellen und Sicherheitsgrenze)
- Schemata haben Tabellen .
- Tabellen haben Zeilen .
- Zeilen haben Werte , die durch Spalten definiert sind .
Bei diesen Werten handelt es sich um die Geschäftsdaten, die Ihren Apps und Benutzern wichtig sind, z. B. Name der Person, Fälligkeitsdatum der Rechnung, Produktpreis und Highscore des Spielers. Die Spalte definiert den Datentyp der Werte (Text, Datum, Nummer usw.).
Mehrere Cluster
Dieses Diagramm zeigt einen einzelnen Cluster. Bei Postgres können Sie mehr als einen Cluster pro Host-Computer (oder virtuellem Betriebssystem) haben. In der Regel werden mehrere Cluster zum Testen und Bereitstellen neuer Versionen von Postgres verwendet (Beispiel: 9.0 , 9.1 , 9.2 , 9.3 , 9.4 , 9.5 ).
Wenn Sie mehrere Cluster hatten, stellen Sie sich das obige Diagramm doppelt vor.
Unterschiedliche Portnummern ermöglichen es den mehreren Clustern, gleichzeitig nebeneinander zu arbeiten. Jedem Cluster würde eine eigene Portnummer zugewiesen. Das Übliche 5432
ist nur die Standardeinstellung und kann von Ihnen festgelegt werden. Jeder Cluster wartet auf seinem eigenen zugewiesenen Port auf eingehende Datenbankverbindungen.
Beispielszenario
Ein Unternehmen könnte beispielsweise zwei verschiedene Softwareentwicklungsteams haben. Einer schreibt Software zur Verwaltung der Lager, während das andere Team Software zur Verwaltung von Vertrieb und Marketing erstellt. Jedes Entwicklerteam hat seine eigene Datenbank, ohne die des anderen zu kennen.
Das IT-Betriebsteam entschied sich jedoch, beide Datenbanken auf einer einzigen Computerbox (Linux, Mac usw.) auszuführen. Also haben sie auf dieser Box Postgres installiert. Also ein Datenbankserver (Datenbankcluster). In diesem Cluster erstellen sie zwei Kataloge, einen Katalog für jedes Entwicklerteam: einen mit dem Namen "Warehouse" und einen mit dem Namen "Sales".
Jedes Entwicklerteam verwendet viele Dutzend Tabellen mit unterschiedlichen Zwecken und Zugriffsrollen. So organisiert jedes Entwicklerteam seine Tabellen in Schemata. Zufällig verfolgen beide Entwicklerteams die Buchhaltungsdaten, sodass jedes Team zufällig ein Schema mit dem Namen "Buchhaltung" hat. Die Verwendung des gleichen Schemanamens ist kein Problem, da die Kataloge jeweils einen eigenen Namespace haben, sodass keine Kollision auftritt.
Darüber hinaus erstellt jedes Team schließlich eine Tabelle für Buchhaltungszwecke mit dem Namen "Hauptbuch". Wieder keine Namenskollision.
Sie können sich dieses Beispiel als eine Hierarchie vorstellen…
- Computer (Hardware-Box oder virtualisierter Server)
Postgres 9.2
Cluster (Installation)
warehouse
Katalog (Datenbank)
inventory
Schema
accounting
Schema
ledger
Tabelle
- [… Einige andere Tabellen]
sales
Katalog (Datenbank)
selling
Schema
accounting
Schema (zufälliger gleicher Name wie oben)
ledger
Tabelle (zufälliger gleicher Name wie oben)
- [… Einige andere Tabellen]
Postgres 9.3
Cluster
- [… Andere Schemata & Tabellen]
Die Software jedes Entwicklerteams stellt eine Verbindung zum Cluster her. Dabei müssen sie angeben, welcher Katalog (Datenbank) ihnen gehört. Für Postgres müssen Sie eine Verbindung zu einem Katalog herstellen, sind jedoch nicht auf diesen Katalog beschränkt. Dieser anfängliche Katalog ist lediglich eine Standardeinstellung, die verwendet wird, wenn in Ihren SQL-Anweisungen der Name eines Katalogs weggelassen wird.
Wenn das Entwicklerteam jemals auf die Tabellen des anderen Teams zugreifen muss, kann dies der Fall sein, wenn der Datenbankadministrator ihnen die entsprechenden Berechtigungen erteilt hat . Der Zugriff erfolgt mit expliziter Benennung im Muster: catalog.schema.table . Wenn das 'Warehouse'-Team das Hauptbuch des anderen Teams (' Sales'-Team) sehen muss, schreibt es SQL-Anweisungen mit sales.accounting.ledger
. Um auf ihr eigenes Hauptbuch zuzugreifen, schreiben sie lediglich accounting.ledger
. Wenn sie auf beide Ledger im selben Quellcode zugreifen, können sie Verwirrung vermeiden, indem sie ihren eigenen (optionalen) Katalognamen warehouse.accounting.ledger
angeben sales.accounting.ledger
.
Apropos…
Sie können das Wort hören Schema in einem allgemeineren Sinn verwendet, das gesamte Design einer bestimmten Datenbank der Tabellenstruktur bedeutet. Im Gegensatz dazu bedeutet das Wort im SQL-Standard speziell die bestimmte Ebene in der Cluster > Catalog > Schema > Table
Hierarchie.
Postgres verwendet sowohl die Wortdatenbank als auch den Katalog an verschiedenen Stellen, z. B. im Befehl CREATE DATABASE .
Nicht alle Datenbanksysteme bieten diese vollständige Hierarchie von Cluster > Catalog > Schema > Table
. Einige haben nur einen einzigen Katalog (Datenbank). Einige haben kein Schema, nur einen Satz von Tabellen. Postgres ist ein außergewöhnlich starkes Produkt.
...Catalog > Schema...
ja, kann mir jemand sagen, warum "Katalog" - und "Schema" -Knoten in pgAdmin (PostgreSQL-Benutzeroberfläche) Geschwisterknoten anstelle des Schemaknotens als untergeordneter Knoten des Katalogs sind?PostgreSQL (pg_catalog)
, den Systemkatalog, die Dutzende von „pg_“ Tabellen, die die Metadaten - Definitionen Ihrer Datenbanken speichern, wiepg_index
,pg_trigger
undpg_constraint
. (2)ANSI (information_schema)
die schreibgeschützte Ansicht desselben Systemkatalogs, der durch den SQL-Standard definiert ist alsinformation_schema
. Ein besserer Name für den Knoten "Kataloge" in pgAdmin könnte "System" oder "Systemtabellen" sein.