A skálázás alapvető fogalmai 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)
Mielőtt megvizsgálnánk egy új alkalmazás létrehozásának lépéseit, hasznos lehet gyorsan áttekinteni az érintett kifejezéseket és fogalmakat.
Architekturális áttekintés
Az Azure Cosmos DB for PostgreSQL segítségével táblákat és/vagy sémákat oszthat ki egy fürt több gépén, és transzparens módon lekérdezheti őket, ugyanúgy, mint az egyszerű PostgreSQL-et:
Az Azure Cosmos DB for PostgreSQL architektúrában több csomóponttípus létezik:
- A koordinátor csomópont tárolja az elosztott tábla metaadatait, és felelős az elosztott tervezésért.
- Ezzel szemben a feldolgozó csomópontok tárolják a tényleges adatokat, metaadatokat, és elvégezik a számítást.
- A koordinátor és a feldolgozók is egyszerű PostgreSQL-adatbázisok, a
citus
bővítmény betöltve.
Normál PostgreSQL-táblázat terjesztéséhez , például campaigns
a fenti ábrán, futtasson egy úgynevezett create_distributed_table()
parancsot. A parancs futtatása után az Azure Cosmos DB for PostgreSQL transzparens módon hoz létre szegmenseket a táblához a feldolgozó csomópontok között. A diagramban a szegmensek kék mezőkként jelennek meg.
Normál PostgreSQL-séma terjesztéséhez futtassa a citus_schema_distribute()
parancsot. A parancs futtatása után az Azure Cosmos DB for PostgreSQL transzparensen egyetlen, a fürt csomópontjai közötti egységként áthelyezhető, szegmensekkel tagolt táblává alakítja az ilyen sémákban lévő táblákat.
Feljegyzés
Munkavégző csomópontok nélküli fürtökön az elosztott táblák szegmensei a koordinátor csomóponton találhatók.
A szegmensek egyszerű (de speciálisan elnevezett) PostgreSQL-táblák, amelyek az adatok szeleteit tartalmazzák. A példánkban, mivel a campaigns
company_id
szilánkok olyan kampányokat tárolnak, amelyekben a különböző vállalatok kampányai különböző szegmensekhez vannak rendelve.
Terjesztési oszlop (más néven szegmenskulcs)
create_distributed_table()
Az Azure Cosmos DB for PostgreSQL által biztosított varázsfüggvény a táblák elosztásához és az erőforrások több gép közötti használatához.
SELECT create_distributed_table(
'table_name',
'distribution_column');
A fenti második argumentum egy oszlopot választ ki a táblázatból terjesztési oszlopként. Bármely olyan oszlop lehet, amely natív PostgreSQL-típussal rendelkezik (az egész szám és a szöveg a leggyakoribb). A terjesztési oszlop értéke határozza meg, hogy mely sorok melyik szegmensekbe kerülnek, ezért a terjesztési oszlopot szegmenskulcsnak is nevezik.
Az Azure Cosmos DB for PostgreSQL a szegmenskulcs használata alapján dönti el, hogyan futtathat lekérdezéseket:
A lekérdezés magában foglalja | A futtatás helye |
---|---|
csak egy szegmenskulcs | a szegmenst tartalmazó feldolgozó csomóponton |
több szegmenskulcs | párhuzamosított több csomópont között |
A szegmenskulcs kiválasztása határozza meg az alkalmazások teljesítményét és méretezhetőségét.
- A szegmenskulcsonkénti egyenetlen adateloszlás (más néven adateltérés) nem optimális a teljesítmény szempontjából. Ne válasszon például olyan oszlopot, amelynek egyetlen értéke az adatok 50%-át képviseli.
- Az alacsony számosságú szegmenskulcsok hatással lehetnek a méretezhetőségre. Csak annyi szegmenst használhat, amennyi különböző kulcsérték van. Válasszon egy több száztól több ezerig számosságú kulcsot.
- Két nagy tábla különböző szegmenskulcsokkal való összekapcsolása lassú lehet. Válasszon egy közös szegmenskulcsot a nagy táblák között. További információ a közös elhelyezésről.
Közös elhelyezés
A szilánkkulcshoz szorosan kapcsolódó másik fogalom a közös elhelyezés. Az azonos terjesztési oszlopértékekkel szilánkolt táblák egymásba vannak helyezve – A megosztott táblák szegmensei ugyanazon a feldolgozón vannak tárolva.
Az alábbiakban két táblát szilánkos ugyanaz a kulcs, site_id
. Áthelyezték őket.
Az Azure Cosmos DB for PostgreSQL biztosítja, hogy a két táblában egyező értékkel rendelkező site_id
sorok ugyanazon a feldolgozó csomóponton legyenek tárolva. Láthatja, hogy mindkét tábla esetében a sorokat site_id=1
az 1. feldolgozó tárolja. Más webhelyazonosítókhoz hasonlóan.
A kolocation segít optimalizálni a JOIN-eket ezeken a táblákon. Ha csatlakozik a két táblához site_id
, az Azure Cosmos DB for PostgreSQL helyileg is végrehajthatja az illesztést a munkavégző csomópontokon anélkül, hogy az adatokat a csomópontok között keveri.
Az elosztott sémán belüli táblák mindig egymással vannak együtt helyezve.