Méretezhető és nagy teljesítményű táblák tervezése

Tipp.

A cikk információi az eredeti Azure Table Storage-ra vonatkoznak. Ugyanezek a fogalmak vonatkoznak az újabb Azure Cosmos DB for Tablere is, amely nagyobb teljesítményt és rendelkezésre állást, globális elosztást és automatikus másodlagos indexeket kínál. Fogyasztásalapú kiszolgáló nélküli módban is elérhető. Az Azure Cosmos DB-ben és az Azure Table Storage-ban található Table API között van néhány funkcióbeli különbség . További információ: Azure Cosmos DB for Table. A könnyebb fejlesztés érdekében mostantól egységes Azure Tables SDK-t biztosítunk, amely az Azure Table Storage és az Azure Cosmos DB for Table célként való megcélzására is használható.

Skálázható és teljesítményalapú táblák tervezéséhez figyelembe kell vennie olyan tényezőket, mint a teljesítmény, a méretezhetőség és a költség. Ha korábban relációs adatbázisok sémáit tervezte, ezek a szempontok ismerősek, de bár vannak hasonlóságok az Azure Table Service Storage-modell és a relációs modellek között, fontos különbségek is vannak. Ezek a különbségek általában különböző kialakításokhoz vezetnek, amelyek a relációs adatbázisokban jártas személyek számára ellentétesen vagy helytelenül néznek ki, mégis érdemes lehet noSQL-kulcsokat/értéktárakat, például az Azure Table szolgáltatást tervezni. A tervezési különbségek nagy része azt tükrözi, hogy a Table szolgáltatás olyan felhőalapú alkalmazásokat támogat, amelyek több milliárd entitást (vagy sorokat tartalmazhatnak a relációs adatbázis terminológiájában) vagy olyan adathalmazokat, amelyeknek nagy tranzakciómennyiségeket kell támogatniuk. Ezért másképp kell gondolnia az adatok tárolására, és meg kell értenie a Table szolgáltatás működését. A jól megtervezett NoSQL-adattár lehetővé teszi, hogy a megoldás sokkal tovább és alacsonyabb költséggel méretezhető legyen, mint egy relációs adatbázist használó megoldás. Ez az útmutató segít az alábbi témakörökben.

Az Azure Table szolgáltatás ismertetése

Ez a szakasz kiemeli a Table szolgáltatás néhány kulcsfontosságú funkcióját, amelyek különösen fontosak a teljesítmény és a méretezhetőség tervezése szempontjából. Ha még nem használta az Azure Storage-t és a Table szolgáltatást, először olvassa el az Azure Table Storage használatának első lépéseit a .NET használatával, mielőtt elolvassa a cikk hátralévő részét. Bár az útmutató középpontjában a Table szolgáltatás áll, az Azure Queue- és Blob-szolgáltatások ismertetését, valamint azt, hogy hogyan használhatja őket a Table szolgáltatással.

Mi a Table szolgáltatás? Ahogy a névtől várható, a Table szolgáltatás táblázatos formátumot használ az adatok tárolásához. A standard terminológiában a tábla minden sora egy entitást jelöl, az oszlopok pedig az entitás különböző tulajdonságait tárolják. Minden entitáshoz tartozik egy kulcspár, amely egyedileg azonosítja azt, és egy időbélyeg-oszlop, amelyet a Table szolgáltatás az entitás legutóbbi frissítésének nyomon követésére használ. A program automatikusan alkalmazza az időbélyeget, és nem írhatja felül manuálisan az időbélyeget tetszőleges értékkel. A Table szolgáltatás ezt az utolsó módosítású időbélyeget (LMT) használja az optimista egyidejűség kezelésére.

Feljegyzés

A Table service REST API-műveletei az LMT-ből származó ETag-értéket is visszaadják. Ez a dokumentum az ETag és az LMT kifejezéseket használja felcserélhetően, mivel ugyanazokra az alapul szolgáló adatokra hivatkoznak.

Az alábbi példa egy egyszerű táblatervet mutat be az alkalmazottak és részlegek entitásainak tárolására. Az útmutató későbbi részében bemutatott példák közül sok erre az egyszerű kialakításra épül.

PartitionKey RowKey Időbélyegző
Marketing 00001 2014-08-22T00:50:32Z
FirstName LastName Kor E-mail
Don Hall 34 donh@contoso.com
Marketing 00002 2014-08-22T00:50:34Z
FirstName LastName Kor E-mail
jún. Cao 47 junc@contoso.com
Marketing Részleg 2014-08-22T00:50:30Z
DepartmentName EmployeeCount
Marketing 153
Sales 00010 2014-08-22T00:50:44Z
FirstName LastName Kor E-mail
Ken Kwok 23 kenk@contoso.com

Eddig ezek az adatok a relációs adatbázisban lévő táblákhoz hasonlóan jelennek meg, és a fő különbségek a kötelező oszlopok, valamint a több entitástípus ugyanabban a táblában való tárolásának lehetősége. Emellett a felhasználó által definiált tulajdonságok, például a FirstName vagy az Age is rendelkezik adattípussal, például egész számokkal vagy sztringekkel, akárcsak egy relációs adatbázis oszlopa. Bár a relációs adatbázisoktól eltérően a Table szolgáltatás séma nélküli jellege azt jelenti, hogy egy tulajdonságnak nem kell azonos adattípussal rendelkeznie az egyes entitásokon. Ha összetett adattípusokat szeretne egyetlen tulajdonságban tárolni, szerializált formátumot kell használnia, például JSON-t vagy XML-t. A táblaszolgáltatásról, például a támogatott adattípusokról, a támogatott dátumtartományokról, az elnevezési szabályokról és a méretkorlátozásokról további információt a Table Service adatmodelljének ismertetése című témakörben talál.

A PartitionKey és a RowKey kiválasztása alapvető fontosságú a jó táblatervezéshez. A táblában tárolt entitásoknak a PartitionKey és a RowKey egyedi kombinációjával kell rendelkezniük. A relációs adatbázistáblák kulcsaihoz hasonlóan a PartitionKey és a RowKey értékek indexelve létrehoznak egy fürtözött indexet a gyors keresések engedélyezéséhez. A Table szolgáltatás azonban nem hoz létre másodlagos indexeket, ezért a PartitionKey és a RowKey az egyetlen indexelt tulajdonság. A táblázattervezési mintákban ismertetett minták némelyike bemutatja, hogyan lehet megkerülni ezt a látszólagos korlátozást.

A táblák egy vagy több partícióból állnak, és számos tervezési döntés a megoldás optimalizálásához megfelelő PartitionKey és RowKey kiválasztásával kapcsolatos. A megoldások egyetlen táblából állhatnak, amely az összes entitást partíciókba rendezve tartalmazza, de általában egy megoldás több táblával rendelkezik. A táblák segítségével logikusan rendszerezheti az entitásokat, hozzáférés-vezérlési listákkal kezelheti az adatokhoz való hozzáférést, és egyetlen tárolási művelettel elvethet egy teljes táblát.

Táblapartíciók

A fióknév, a táblanév és a PartitionKey együttesen azonosítja azt a partíciót a tárolási szolgáltatásban, amelyben a táblaszolgáltatás tárolja az entitást. Az entitások címzési sémájának részeként a partíciók definiálják a tranzakciók hatókörét (lásd alább az entitáscsoport tranzakcióit ), és a táblaszolgáltatás skálázásának alapját képezik. A partíciókról további információt a Table Storage teljesítmény- és méretezhetőségi ellenőrzőlistájában talál.

A Table szolgáltatásban az egyes csomópontok egy vagy több teljes partíciót használnak, a szolgáltatás pedig dinamikusan terheléselosztási partíciókkal skálázható a csomópontok között. Ha egy csomópont terhelés alatt áll, a táblaszolgáltatás feloszthatja az adott csomópont által kiszolgált partíciók tartományát különböző csomópontokra; ha a forgalom csökken, a szolgáltatás a csendes csomópontok partíciótartományait egyetlen csomópontra egyesítheti.

A Table szolgáltatás belső részleteiről és különösen a partíciók kezelésének módjáról a Microsoft Azure Storage: Magas rendelkezésre állású felhőalapú tárolási szolgáltatás erős konzisztenciával című tanulmányában olvashat.

Entitáscsoport tranzakciói

A Table service-ben az entitáscsoport-tranzakciók (EGT-k) az egyetlen beépített mechanizmus, amely atomi frissítéseket hajt végre több entitáson. Az EGT-eket néha kötegtranzakcióknak is nevezik. Az EGT-ek csak ugyanazon a partíción tárolt entitásokon működhetnek (vagyis ugyanazzal a partíciókulcszal egy adott táblában). Ezért bármikor, amikor atomi tranzakciós viselkedésre van szükség több entitás között, gondoskodnia kell arról, hogy ezek az entitások ugyanabban a partícióban legyenek. Ez gyakran oka annak, hogy több entitástípust is ugyanabban a táblában (és partícióban) tart, és nem használ több táblát a különböző entitástípusokhoz. Egyetlen EGT legfeljebb 100 entitáson működhet. Ha több egyidejű EGT-t küld feldolgozásra, fontos gondoskodni arról, hogy ezek az EGT-k ne működjenek olyan entitásokon, amelyek gyakoriak a teljes EGA-kban; ellenkező esetben a feldolgozás késleltethető.

Az EGT-k emellett potenciális kompromisszumot is bevezetnek a tervezés során történő értékeléshez. Ez azt jelzi, hogy a több partíció használata növeli az alkalmazás méretezhetőségét, mivel az Azure több lehetőséget kínál a csomópontok közötti terheléselosztási kérelmekre. A további partíciók használata azonban korlátozhatja az alkalmazás atomi tranzakciók végrehajtását és az adatok erős konzisztenciájának fenntartását. Emellett vannak olyan konkrét méretezhetőségi célok egy partíció szintjén, amelyek korlátozhatják az egy csomópontra várható tranzakciók átviteli sebességét. Az Azure Standard Storage-fiókok méretezhetőségi céljairól a standard tárfiókok méretezhetőségi céljait ismertető cikkben talál további információt. A Table service méretezhetőségi céljairól további információt a Table Storage méretezhetőségi és teljesítménycéljai című témakörben talál.

Kapacitással kapcsolatos szempontok

Az alábbi táblázat a kapacitás-, méretezhetőség- és teljesítménycélokat ismerteti a Table Storage esetében.

Erőforrás Cél
Az Azure-tárfiókban található táblázatok száma Csak a tárfiók kapacitása korlátozza
A partíciók száma a táblázatban Csak a tárfiók kapacitása korlátozza
Entitások száma egy partíción belül Csak a tárfiók kapacitása korlátozza
Egyetlen táblázat maximális mérete 500 TiB
Egyetlen entitás maximális mérete, az összes tulajdonságértéket beleértve 1 MiB
Tulajdonságok maximális száma egy táblázatentitásban 255 (a három rendszertulajdonságot – PartitionKey, RowKey és Timestamp – is beleértve)
Egyedi tulajdonság maximális teljes mérete egy entitásban Tulajdonságtípustól függően változik. További információt a Table Service adatmodelljét ismertető témakör tulajdonságtípusokkal foglalkozó részében talál.
A PartitionKey mérete Legfeljebb 1024 karakter hosszúságú sztring
A RowKey mérete Legfeljebb 1024 karakter hosszúságú sztring
Az entitáscsoport-tranzakció mérete Egy tranzakció legfeljebb 100 entitást tartalmazhat, és a hasznos adat méretének 4 MiB értéknél kisebbnek kell lennie. Egy entitáscsoport-tranzakció egy entitást legfeljebb egyszer frissíthet.
Tárolt hozzáférési szabályzatok táblázatonkénti maximális száma 5
Maximális kérelemmennyiség tárfiókonként 20 000 tranzakció másodpercenként, 1 KiB entitásméretet feltételezve
Az átviteli sebesség célértéke egyetlen táblázatpartíció esetében (1 KiB méretű entitások) Legfeljebb 2000 entitás másodpercenként

Költségekkel kapcsolatos szempontok

A table storage viszonylag olcsó, de a Table service-megoldások kiértékelésének részeként a kapacitáshasználatra és a tranzakciók mennyiségére vonatkozó költségbecsléseket is tartalmaznia kell. Számos esetben azonban a denormalizált vagy duplikált adatok tárolása a megoldás teljesítményének vagy méretezhetőségének javítása érdekében érvényes módszer. A díjszabással kapcsolatos további információkért tekintse meg az Azure Storage díjszabását.

Következő lépések