Megosztás a következőn keresztül:


Több-bérlős SaaS-alkalmazások modellezése az Azure Cosmos DB for PostgreSQL-ben

Fontos

Az Azure Cosmos DB for PostgreSQL már nem támogatott új projektek esetén. Ne használja ezt a szolgáltatást új projektekhez. Ehelyett használja az alábbi két szolgáltatás egyikét:

  • Az Azure Cosmos DB for NoSQL használata nagy léptékű forgatókönyvekhez tervezett elosztott adatbázis-megoldáshoz 99,999% rendelkezésre állási szolgáltatásiszint-szerződéssel (SLA), azonnali automatikus skálázással és automatikus feladatátvétellel több régióban.

  • Használja az Azure Database For PostgreSQL Rugalmas fürtök funkcióját a megosztott PostgreSQL-hez a nyílt forráskódú Citus-bővítmény használatával.

Bérlőazonosító szegmenskulcsként

A bérlőazonosító a számítási feladat gyökerének oszlopa, vagy az adatmodell hierarchiájának felső része. Ebben az SaaS e-kereskedelmi sémában például az áruház azonosítója:

Táblázatdiagram a store_id oszlop kiemelésével.

Ez az adatmodell egy olyan üzletre jellemző, mint a Shopify. Több online áruház webhelyeit üzemelteti, ahol minden áruház a saját adataival kommunikál.

  • Ez az adatmodell több táblát tartalmaz: áruházakat, termékeket, rendeléseket, sorelemeket és országokat.
  • Az áruházak táblázata a hierarchia tetején található. A termékek, rendelések és sorelemek mind az áruházakhoz vannak társítva, így alacsonyabbak a hierarchiában.
  • Az országtábla nem kapcsolódik az egyes üzletekhez, hanem a különböző üzletek között van.

Ebben a példában , store_idamely a hierarchia tetején található, a bérlő azonosítója. Ez a megfelelő töredékkulcs. A store_id szilánkkulcsként való kiválasztása lehetővé teszi az adatok összehangolását az összes táblában egyetlen áruházhoz egyetlen munkásnál.

A táblák tárolónkénti áthelyezésének előnyei:

  • SQL-lefedettséget biztosít, például idegen kulcsokat, JOIN-eket. Az egyetlen bérlő tranzakciói egyetlen munkavégző csomóponton vannak honosítva, ahol az egyes bérlők léteznek.
  • Egyjegyű ezredmásodperces teljesítményt ér el. Egy bérlő lekérdezései egyetlen csomópontra lesznek irányítva a párhuzamos feldolgozás helyett, ami segít optimalizálni a hálózati lépéseket, és skálázni a számítási és memória kapacitást.
  • Skálázható. A bérlők számának növekedésével csomópontokat adhat hozzá, és újraegyensúlyozhatja a bérlőket az új csomópontokhoz, vagy akár elkülönítheti a nagy bérlőket a saját csomópontjaikhoz. A bérlői elkülönítés lehetővé teszi, hogy dedikált erőforrásokat biztosítson.

Az ugyanazon csomópontokra áthelyezett táblák diagramja.

Optimális adatmodell több-bérlős alkalmazásokhoz

Ebben a példában az üzletspecifikus táblákat üzletazonosító szerint kell elosztanunk, és referenciatáblát kell készítenünk countries .

Diagram a táblákról, melyeken a store_id univerzálisabban van kiemelve.

Fontos megjegyezni, hogy a bérlőspecifikus táblák rendelkeznek a bérlőazonosítóval, és elosztott formában vannak. Példánkban üzletek, termékek és sor tételek kerülnek elosztásra. A többi tábla referenciatáblák. A példánkban az Országok tábla egy referenciatábla.

-- Distribute large tables by the tenant ID

SELECT create_distributed_table('stores', 'store_id');
SELECT create_distributed_table('products', 'store_id', colocate_with => 'stores');
-- etc for the rest of the tenant tables...

-- Then, make "countries" a reference table, with a synchronized copy of the
-- table maintained on every worker node

SELECT create_reference_table('countries');

Minden nagy táblának rendelkeznie kell a bérlőazonosítóval.

  • Ha egy meglévő több-bérlős alkalmazást migrál az Azure Cosmos DB for PostgreSQL-be, előfordulhat, hogy egy kicsit denormalizálnia kell a nagy táblákat, hozzá kell adnia a bérlő ID oszlopot, ha hiányzik, majd ki kell töltenie az oszlop hiányzó értékeit.
  • Az Azure Cosmos DB for PostgreSQL-en futó új alkalmazások esetében győződjön meg arról, hogy a bérlőazonosító megtalálható az összes bérlőspecifikus táblában.

Győződjön meg arról, hogy a bérlőazonosítót az elosztott táblák elsődleges, egyedi és idegen kulcsra vonatkozó megkötéseihez összetett kulcs formájában kell megadni. Ha például egy táblának id az elsődleges kulcsa, alakítsa (tenant_id,id)-re mint összetett kulcs. A referenciatáblák kulcsait nem kell módosítani.

Lekérdezési szempontok a legjobb teljesítmény érdekében

A bérlőazonosítóra szűrő elosztott lekérdezések a leghatékonyabban futnak több-bérlős alkalmazásokban. Győződjön meg arról, hogy a lekérdezések mindig egyetlen bérlőre terjednek ki.

SELECT *
  FROM orders
 WHERE order_id = 123
   AND store_id = 42;  -- ← tenant ID filter

A bérlőazonosító-szűrőt akkor is hozzá kell adni, ha az eredeti szűrőfeltételek egyértelműen azonosítják a kívánt sorokat. A bérlőazonosító-szűrő látszólag redundáns módon tájékoztatja az Azure Cosmos DB for PostgreSQL-et, hogyan irányíthatja a lekérdezést egyetlen feldolgozó csomópontra.

Hasonlóképpen, ha két elosztott táblához csatlakozik, győződjön meg arról, hogy mindkét tábla hatóköre egyetlen bérlőre terjed ki. A hatókör meghatározásához gondoskodjon arról, hogy az illesztés feltételei tartalmazzák a bérlőazonosítót.

SELECT sum(l.quantity)
  FROM line_items l
 INNER JOIN products p
    ON l.product_id = p.product_id
   AND l.store_id = p.store_id   -- ← tenant ID in join
 WHERE p.name='Awesome Wool Pants'
   AND l.store_id='8c69aa0d-3f13-4440-86ca-443566c1fc75';
       -- ↑ tenant ID filter

Számos népszerű alkalmazás-keretrendszer segédkódtárai megkönnyítik a bérlőazonosítók lekérdezésekbe való belefoglalását. Az alábbiakban a következő utasításokat találja:

Következő lépések

Most befejeztük a méretezhető alkalmazások adatmodellezésének feltárását. A következő lépés az adatbázis csatlakoztatása és lekérdezése a választott programozási nyelvvel.