Mike Sherrill „Cat Recall” dał doskonałą odpowiedź . Dodam po prostu jeden przykład: Postgres .
Klaster = instalacja Postgres
Podczas instalowania Postgres na komputerze ta instalacja jest nazywana klastrem . Termin „klaster” nie jest tu rozumiany w sensie sprzętowym wielu komputerów pracujących razem. W Postgres klaster odnosi się do faktu, że możesz mieć wiele niepowiązanych baz danych, wszystkie działające przy użyciu tego samego silnika serwera Postgres.
Słowo klaster jest również definiowane przez standard SQL w taki sam sposób, jak w Postgres. Ściśle przestrzeganie standardu SQL jest głównym celem projektu Postgres.
Specyfikacja SQL-92 mówi:
Klaster to zbiór katalogów zdefiniowany w ramach implementacji.
i
Dokładnie jeden klaster jest powiązany z sesją SQL
To tępy sposób powiedzenia, że klaster to serwer bazy danych (każdy katalog to baza danych).
Klaster> Katalog> Schemat> Tabela> Kolumny i wiersze
Więc zarówno w Postgresie, jak iw standardzie SQL mamy następującą hierarchię zawierania:
- Komputer może mieć jeden klaster lub wiele.
- Serwer bazy danych to klaster .
- Klaster ma katalogi . (Katalog = baza danych)
- Katalogi mają schematy . (Schemat = przestrzeń nazw tabel i granica zabezpieczeń)
- Schematy mają tabele .
- Tabele mają rzędy .
- Wiersze mają wartości zdefiniowane przez kolumny .
Te wartości to dane biznesowe, na których zależy Twoim aplikacjom i użytkownikom, takie jak imię i nazwisko osoby, termin płatności faktury, cena produktu, wysoki wynik gracza. Kolumna definiuje typ danych wartości (tekst, data, liczba itd.).
Wiele klastrów
Ten diagram przedstawia pojedynczy klaster. W przypadku Postgres można mieć więcej niż jeden klaster na komputer hosta (lub wirtualny system operacyjny). Zwykle wykonuje się wiele klastrów w celu testowania i wdrażania nowych wersji Postgres (np .: 9.0 , 9.1 , 9.2 , 9.3 , 9.4 , 9.5 ).
Jeśli masz wiele klastrów, wyobraź sobie powielony diagram powyżej.
Różne numery portów umożliwiają współdziałanie wielu klastrów w tym samym czasie. Każdy klaster miałby przypisany własny numer portu. Zwykłe 5432
jest tylko domyślne i możesz je ustawić samodzielnie. Każdy klaster nasłuchuje na swoim własnym przypisanym porcie dla przychodzących połączeń z bazą danych.
Przykładowy scenariusz
Na przykład firma może mieć dwa różne zespoły programistyczne. Jeden pisze oprogramowanie do zarządzania magazynami, podczas gdy drugi zespół tworzy oprogramowanie do zarządzania sprzedażą i marketingiem. Każdy zespół deweloperów ma własną bazę danych, błogo nieświadomą innych.
Ale zespół operacyjny IT podjął decyzję o uruchomieniu obu baz danych na jednym komputerze (Linux, Mac, cokolwiek). Więc na tym pudełku zainstalowali Postgres. Czyli jeden serwer bazy danych (klaster bazy danych). W tym klastrze tworzą dwa katalogi, katalog dla każdego zespołu programistów: jeden o nazwie „magazyn” i jeden o nazwie „sprzedaż”.
Każdy zespół programistów używa dziesiątek tabel o różnych celach i rolach dostępu. Dlatego każdy zespół programistów organizuje swoje tabele w schematy. Przypadkowo oba zespoły programistów śledzą dane księgowe, więc tak się składa, że każdy zespół ma schemat o nazwie „księgowość”. Używanie tej samej nazwy schematu nie stanowi problemu, ponieważ każdy katalog ma własną przestrzeń nazw, więc nie ma kolizji.
Ponadto każdy zespół ostatecznie tworzy tabelę do celów księgowych o nazwie „księga główna”. Ponownie, bez kolizji nazw.
Możesz myśleć o tym przykładzie jako o hierarchii…
- Komputer (skrzynka sprzętowa lub serwer zwirtualizowany)
Postgres 9.2
klaster (instalacja)
warehouse
katalog (baza danych)
inventory
schemat
accounting
schemat
ledger
stół
- [… Kilka innych tabel]
sales
katalog (baza danych)
selling
schemat
accounting
schemat (przypadkowo taka sama nazwa jak powyżej)
ledger
tabela (przypadkowo taka sama nazwa jak powyżej)
- [… Kilka innych tabel]
Postgres 9.3
grupa
- [… Inne schematy i tabele]
Oprogramowanie każdego zespołu deweloperskiego nawiązuje połączenie z klastrem. Robiąc to, muszą określić, który katalog (baza danych) jest ich. Postgres wymaga połączenia się z jednym katalogiem, ale nie jesteś ograniczony do tego katalogu. Ten początkowy katalog jest tylko domyślnym, używanym, gdy w instrukcjach SQL pomijana jest nazwa katalogu.
Więc jeśli zespół programistów kiedykolwiek będzie musiał uzyskać dostęp do tabel innego zespołu, może to zrobić, jeśli administrator bazy danych nadał im takie uprawnienia . Dostęp odbywa się z jawnym nazewnictwem we wzorcu: catalog.schema.table . Jeśli więc zespół „magazynu” musi zobaczyć księgę innego zespołu (zespołu „sprzedaży”), pisze instrukcje SQL za pomocą sales.accounting.ledger
. Aby uzyskać dostęp do własnej księgi, po prostu piszą accounting.ledger
. Jeżeli mają dostęp do obu ksiąg w tym samym kawałku kodu źródłowego, mogą wybrać, aby uniknąć nieporozumień przy tym własnego (opcjonalnie) nazwę katalogu, warehouse.accounting.ledger
w porównaniu sales.accounting.ledger
.
Tak poza tym…
Możesz usłyszeć słowo schemat używane w bardziej ogólnym sensie, oznaczającym cały projekt struktury tabeli konkretnej bazy danych. Z kolei w standardzie SQL słowo to oznacza konkretnie określoną warstwę w Cluster > Catalog > Schema > Table
hierarchii.
Postgres używa zarówno bazy danych słów, jak i katalogu w różnych miejscach, takich jak komenda CREATE DATABASE .
Nie wszystkie systemy baz danych zapewniają tę pełną hierarchię plików Cluster > Catalog > Schema > Table
. Niektóre mają tylko jeden katalog (bazę danych). Niektóre nie mają schematu, tylko jeden zestaw tabel. Postgres to wyjątkowo potężny produkt.
...Catalog > Schema...
, czy ktoś może mi powiedzieć, dlaczego węzły „Catalog” i „Schema” w pgAdmin (UI PostgreSQL) są węzłami rodzeńskimi, a nie węzłem schematu jako węzłem podrzędnym katalogu?PostgreSQL (pg_catalog)
, katalog systemowy, dziesiątki „pg_” tabel, które przechowują definicje metadanych z baz danych, takich jakpg_index
,pg_trigger
ipg_constraint
. (2)ANSI (information_schema)
, widok tylko do odczytu tego samego katalogu systemowego zdefiniowanego przez standard SQL jakoinformation_schema
. Lepszą nazwą węzła „Katalogi” w pgAdmin może być „System” lub „Tabele systemowe”.