Csomópontok és táblák az Azure Cosmos DB for PostgreSQL-ben
A KÖVETKEZŐKRE VONATKOZIK: Azure Cosmos DB for PostgreSQL (a Citus adatbázisbővítménye a PostgreSQL-re)
Csomópontok
Az Azure Cosmos DB for PostgreSQL lehetővé teszi a PostgreSQL-kiszolgálók (úgynevezett csomópontok) számára, hogy egy "megosztott semmit" architektúrában összehangolják egymással. A fürtök csomópontjai együttesen több adatot tárolnak, és több processzormagot használnak, mint amennyi egyetlen kiszolgálón lehetséges lenne. Az architektúra lehetővé teszi az adatbázis skálázását is, ha további csomópontokat ad hozzá a fürthöz.
Koordinátor és munkavállalók
Minden fürtnek van egy koordinátori csomópontja és több feldolgozója. Az alkalmazások elküldik a lekérdezéseiket a koordinátor csomópontnak, amely továbbítja azokat az érintett dolgozóknak, és összegyűjti az eredményeket.
Az Azure Cosmos DB for PostgreSQL lehetővé teszi, hogy az adatbázis-rendszergazda táblákat és/vagy sémákat terjesszen , különböző sorokat tárolva különböző feldolgozó csomópontokon. Az elosztott táblák és/vagy sémák az Azure Cosmos DB for PostgreSQL teljesítményének kulcsai. A táblák és/vagy sémák elosztásának sikertelensége teljesen a koordinátori csomóponton marad, és nem tudja kihasználni a gépközi párhuzamosság előnyeit.
Az elosztott táblákon lévő összes lekérdezés esetében a koordinátor vagy egyetlen feldolgozó csomópontra irányítja, vagy több különböző területen párhuzamosítja, attól függően, hogy a szükséges adatok egyetlen csomóponton vagy több csomóponton találhatók-e. Sémaalapú horizontális skálázás esetén a koordinátor közvetlenül a sémát futtató csomópontra irányítja a lekérdezéseket. A sémaalapú skálázás és a soralapú horizontális skálázás esetén a koordinátor a metaadattáblák megtekintésével dönti el, hogy mi a teendő. Ezek a táblák nyomon követik a feldolgozó csomópontok DNS-nevét és állapotát, valamint az adatok csomópontok közötti elosztását.
Táblázattípusok
A fürtökben öt táblatípus található, amelyek mindegyike más-más módon van tárolva a csomópontokon, és különböző célokra használatos.
1. típus: Elosztott táblák
Az első típus és a leggyakoribb az elosztott táblák. Úgy tűnik, hogy az SQL-utasítások normál táblái, de vízszintesen vannak particionálva a munkavégző csomópontok között. Ez azt jelenti, hogy a tábla sorai különböző csomópontokon, szegmensek nevű töredéktáblákban vannak tárolva.
Az Azure Cosmos DB for PostgreSQL nem csak SQL- és DDL-utasításokat futtat egy fürtben. Az elosztott tábla sémájának módosítása kaszkádolt, így a tábla összes szegmense frissíthető a feldolgozók között.
Terjesztési oszlop
Az Azure Cosmos DB for PostgreSQL algoritmikus skálázást használ a sorok szegmensekhez való hozzárendeléséhez. A hozzárendelés determinisztikus módon történik a terjesztési oszlopnak nevezett táblaoszlop értéke alapján. A fürt rendszergazdájának ezt az oszlopot kell kijelölnie egy tábla terjesztésekor. A teljesítmény és a funkcionalitás szempontjából fontos a megfelelő választás.
2. típus: Referenciatáblák
A referenciatáblák olyan elosztott táblák, amelyek teljes tartalma egyetlen szegmensre van koncentrálva. A szegmens minden feldolgozón replikálódik. Bármely feldolgozó lekérdezései helyileg hozzáférhetnek a referenciaadatokhoz, anélkül, hogy a hálózat többletterhelése sorokat kér egy másik csomóponttól. A referenciatáblák nem rendelkeznek terjesztési oszlopokkal, mert nem kell egymástól elkülöníteni a szegmenseket soronként.
A referenciatáblák általában kicsik, és a munkavégző csomópontokon futó lekérdezések szempontjából releváns adatok tárolására szolgálnak. Ilyenek például a számbavételi értékek, például a rendelési állapotok vagy a termékkategóriák.
3. típus: Helyi táblák
Az Azure Cosmos DB for PostgreSQL használatakor a koordinátor csomópont, amelyhez csatlakozik, egy normál PostgreSQL-adatbázis. Létrehozhat rendes táblákat a koordinátoron, és dönthet úgy, hogy nem szilánkok.
A helyi táblák jó jelöltje olyan kis adminisztratív táblák, amelyek nem vesznek részt az illesztési lekérdezésekben. Ilyen például az users
alkalmazás bejelentkezésére és hitelesítésére szolgáló táblázat.
4. típus: Helyi felügyelt táblák
Az Azure Cosmos DB for PostgreSQL automatikusan hozzáadhat helyi táblákat a metaadatokhoz, ha egy helyi tábla és egy referenciatábla között idegen kulcshivatkozás található. Emellett a helyileg felügyelt táblák manuálisan is létrehozhatók create_reference_table citus_add_local_table_to_metadata függvény normál helyi táblákon való végrehajtásával. A metaadatokban található táblák felügyelt tábláknak minősülnek, és bármely csomópontról lekérdezhetők, a Citus tudja, hogy a koordinátorhoz kell irányítania az adatokat a helyi felügyelt táblából. Az ilyen táblák helyiként jelennek meg citus_tables nézetben.
5. típus: Sématáblák
A Citus 12.0-s verziójában bevezetett sémaalapú horizontális skálázás esetén az elosztott sémák automatikusan társítva lesznek az egyes társhelycsoportokhoz. Az ezekben a sémákban létrehozott táblák automatikusan megosztott elosztott táblákká alakulnak szilánkkulcs nélkül. Ezek a táblák sématábláknak minősülnek, és sémaként jelennek meg citus_tables nézetben.
Szilánkok
Az előző szakasz azt ismertette, hogy az elosztott táblák hogyan tárolódnak szegmensekként a feldolgozó csomópontokon. Ez a szakasz további technikai részleteket ismertet.
A pg_dist_shard
koordinátor metaadattáblája a rendszer minden elosztott táblájának egyes szegmenseihez tartalmaz egy sort. A sor egyezik a szegmensazonosítóval egy kivonattér egész számtartományával (shardminvalue, shardmaxvalue).
SELECT * from pg_dist_shard;
logicalrelid | shardid | shardstorage | shardminvalue | shardmaxvalue
---------------+---------+--------------+---------------+---------------
github_events | 102026 | t | 268435456 | 402653183
github_events | 102027 | t | 402653184 | 536870911
github_events | 102028 | t | 536870912 | 671088639
github_events | 102029 | t | 671088640 | 805306367
(4 rows)
Ha a koordinátor csomópont meg szeretné határozni, hogy melyik szegmens tartalmaz egy sort github_events
, kivonatot ad a sor terjesztési oszlopának értékéről. Ezután a csomópont ellenőrzi, hogy melyik szegmens tartománya tartalmazza a kivonatolt értéket. A tartományok úgy vannak definiálva, hogy a kivonatfüggvény képe a különálló egyesítésük legyen.
Szegmenselhelyezések
Tegyük fel, hogy a szegmens 102027 a szóban forgó sorhoz van társítva. A sor egy, az egyik feldolgozóban hívott github_events_102027
táblában olvasható vagy írható. Melyik feldolgozó? Ezt teljes egészében a metaadattáblák határozzák meg. A szegmensek munkavégzőhöz való leképezését szegmenselhelyezésnek nevezzük.
A koordinátor csomópont a lekérdezéseket olyan töredékekre írja át, amelyek az adott táblákra hivatkoznak, például github_events_102027
a megfelelő feldolgozókon futtatják ezeket a töredékeket. Íme egy példa egy olyan lekérdezésre, amely a színfalak mögött fut, és megkeresi a szegmensazonosítót 102027 tároló csomópontot.
SELECT
shardid,
node.nodename,
node.nodeport
FROM pg_dist_placement placement
JOIN pg_dist_node node
ON placement.groupid = node.groupid
AND node.noderole = 'primary'::noderole
WHERE shardid = 102027;
┌─────────┬───────────┬──────────┐
│ shardid │ nodename │ nodeport │
├─────────┼───────────┼──────────┤
│ 102027 │ localhost │ 5433 │
└─────────┴───────────┴──────────┘
Következő lépések
- Az alkalmazás típusának meghatározása az adatmodellezésre való felkészüléshez
- Hasznos diagnosztikai lekérdezésekkel vizsgálja meg a szegmenseket és az elhelyezéseket.