Particionálás és horizontális skálázás az Azure Cosmos DB-benPartitioning and horizontal scaling in Azure Cosmos DB

A következőkre vonatkozik: SQL API CASSANDRA API Gremlin API Table API Azure Cosmos db API a MongoDB

A Azure Cosmos DB particionálás használatával méretezi az egyes tárolókat egy adatbázisban az alkalmazás teljesítménybeli igényeinek kielégítése érdekében.Azure Cosmos DB uses partitioning to scale individual containers in a database to meet the performance needs of your application. A particionálás során a tároló elemei a logikai partíciók nevű különálló részhalmazokra vannak osztva.In partitioning, the items in a container are divided into distinct subsets called logical partitions. A logikai partíciók a tároló egyes elemeihez társított partíciós kulcs értéke alapján jönnek létre.Logical partitions are formed based on the value of a partition key that is associated with each item in a container. Egy logikai partíció összes elemének ugyanaz a partíciós kulcs értéke.All the items in a logical partition have the same partition key value.

Egy tároló például elemeket tárol.For example, a container holds items. Minden egyes tétel egyedi értékkel rendelkezik a UserID tulajdonsághoz.Each item has a unique value for the UserID property. Ha a UserID tárolóban lévő elemek partíciós kulcsaként szolgál, és 1 000 egyedi érték van UserID , akkor a rendszer 1 000 logikai partíciókat hoz létre a tárolóhoz.If UserID serves as the partition key for the items in the container and there are 1,000 unique UserID values, 1,000 logical partitions are created for the container.

Egy olyan partíciós kulcs mellett, amely meghatározza az elem logikai partícióját, a tároló minden eleméhez tartozik egy elem azonosítója (egyedi logikai partíción belül).In addition to a partition key that determines the item's logical partition, each item in a container has an item ID (unique within a logical partition). A partíciós kulcs és az elem azonosítójának kombinálásával létrejön az elem indexe, amely egyedileg azonosítja az adott tételt.Combining the partition key and the item ID creates the item's index, which uniquely identifies the item. A partíciós kulcs kiválasztása fontos döntés, amely hatással lesz az alkalmazás teljesítményére.Choosing a partition key is an important decision that will affect your application's performance.

Ez a cikk a logikai és fizikai partíciók közötti kapcsolatot ismerteti.This article explains the relationship between logical and physical partitions. Emellett a particionálással kapcsolatos ajánlott eljárásokat is ismerteti, és részletesen ismerteti, hogyan működik a horizontális skálázás a Azure Cosmos DBban.It also discusses best practices for partitioning and gives an in-depth view at how horizontal scaling works in Azure Cosmos DB. Ezen belső adatok megértéséhez nem szükséges, hogy kiválassza a partíciós kulcsot, de a kezeltük, hogy egyértelmű legyen a Azure Cosmos DB működése.It's not necessary to understand these internal details to select your partition key but we have covered them so you have clarity on how Azure Cosmos DB works.

Logikai partíciókLogical partitions

A logikai partíciók olyan elemekből állnak, amelyek ugyanazzal a partíciós kulccsal rendelkeznek.A logical partition consists of a set of items that have the same partition key. Például egy olyan tárolóban, amely az élelmiszer-táplálkozással kapcsolatos adatokat tartalmaz, minden elem tartalmaz egy foodGroup tulajdonságot.For example, in a container that contains data about food nutrition, all items contain a foodGroup property. A foodGroup tároló partíciós kulcsaként is használható.You can use foodGroup as the partition key for the container. Olyan elemek csoportjai, amelyek meghatározott értékekkel rendelkeznek foodGroup , például,, Beef Products Baked Products és Sausages and Luncheon Meats , különböző logikai partíciókat alkotnak.Groups of items that have specific values for foodGroup, such as Beef Products, Baked Products, and Sausages and Luncheon Meats, form distinct logical partitions.

A logikai partíció az adatbázis-tranzakciók hatókörét is meghatározza.A logical partition also defines the scope of database transactions. A logikai partíción belüli elemeket egy Pillanatkép-elkülönítéssel rendelkező tranzakcióhasználatával frissítheti.You can update items within a logical partition by using a transaction with snapshot isolation. Amikor új elemeket adnak hozzá egy tárolóhoz, a rendszer transzparens módon létrehozza az új logikai partíciókat.When new items are added to a container, new logical partitions are transparently created by the system. Nem kell aggódnia a logikai partíció törlésével kapcsolatban az alapul szolgáló adat törlésekor.You don't have to worry about deleting a logical partition when the underlying data is deleted.

A tárolóban található logikai partíciók száma nincs korlátozva.There is no limit to the number of logical partitions in your container. Minden logikai partíció akár 20 GB-ot is tárolhat.Each logical partition can store up to 20GB of data. A jó partíciós kulcs választása a lehetséges értékek széles választékával rendelkezik.Good partition key choices have a wide range of possible values. Például egy olyan tárolóban, ahol minden elem tartalmaz egy foodGroup tulajdonságot, a Beef Products logikai partíción belüli adatok 20 GB-ig növekednek.For example, in a container where all items contain a foodGroup property, the data within the Beef Products logical partition can grow up to 20 GB. A lehetséges értékek széles választékával rendelkező partíciós kulcs kiválasztásával biztosítható, hogy a tároló méretezhető legyen.Selecting a partition key with a wide range of possible values ensures that the container is able to scale.

Fizikai partíciókPhysical partitions

A tárolók méretezése az adatok és az átviteli sebesség elosztásával történik a fizikai partíciók között.A container is scaled by distributing data and throughput across physical partitions. Belsőleg egy vagy több logikai partíció egyetlen fizikai partícióra van leképezve.Internally, one or more logical partitions are mapped to a single physical partition. Általában a kisebb tárolók számos logikai partícióval rendelkeznek, de csak egyetlen fizikai partíciót igényelnek.Typically smaller containers have many logical partitions but they only require a single physical partition. A logikai partíciókkal ellentétben a fizikai partíciók a rendszer belső implementációja, és teljes mértékben a Azure Cosmos DB kezeli őket.Unlike logical partitions, physical partitions are an internal implementation of the system and they are entirely managed by Azure Cosmos DB.

A tárolóban lévő fizikai partíciók száma a következőktől függ:The number of physical partitions in your container depends on the following:

  • A kiépített átviteli sebesség száma (az egyes fizikai partíciók másodpercenként legfeljebb 10 000 adatátviteli sebességet biztosíthatnak).The number of throughput provisioned (each individual physical partition can provide a throughput of up to 10,000 request units per second). A fizikai partíciók 10 000 RU/s-korlátja azt jelenti, hogy a logikai partíciók is rendelkeznek 10 000 RU/s korláttal, mivel minden logikai partíció csak egy fizikai partícióra van leképezve.The 10,000 RU/s limit for physical partitions implies that logical partitions also have a 10,000 RU/s limit, as each logical partition is only mapped to one physical partition.

  • A teljes adattárolás (minden egyes fizikai partíció akár 50 GB-adatmennyiséget is tárolhat).The total data storage (each individual physical partition can store up to 50GB data).

Megjegyzés

A fizikai partíciók a rendszer belső megvalósítása, és teljes mértékben a Azure Cosmos DB felügyelik.Physical partitions are an internal implementation of the system and they are entirely managed by Azure Cosmos DB. A megoldások fejlesztésekor ne koncentráljon a fizikai partícióra, mert nem tudja szabályozni őket.When developing your solutions, don't focus on physical partitions because you can't control them. Ehelyett a partíciós kulcsokra kell összpontosítania.Instead, focus on your partition keys. Ha olyan partíciós kulcsot választ, amely egyenletesen osztja el az átviteli sebességet a logikai partíciók között, akkor gondoskodni fog arról, hogy a fizikai partíciók átviteli sebessége egyensúlyban legyen.If you choose a partition key that evenly distributes throughput consumption across logical partitions, you will ensure that throughput consumption across physical partitions is balanced.

A tárolóban lévő fizikai partíciók teljes száma nincs korlátozva.There is no limit to the total number of physical partitions in your container. A kiosztott átviteli sebesség vagy az adatméret növekedésével a Azure Cosmos DB automatikusan új fizikai partíciókat hoz létre a meglévők felosztásával.As your provisioned throughput or data size grows, Azure Cosmos DB will automatically create new physical partitions by splitting existing ones. A fizikai partíciók osztása nem befolyásolja az alkalmazás rendelkezésre állását.Physical partition splits do not impact your application's availability. A fizikai partíció felosztása után az egyetlen logikai partíción belüli összes adattal továbbra is ugyanazon a fizikai partíción lesz tárolva.After the physical partition split, all data within a single logical partition will still be stored on the same physical partition. A fizikai partíciók megosztása egyszerűen létrehozza a logikai partíciók új hozzárendelését a fizikai partíciókhoz.A physical partition split simply creates a new mapping of logical partitions to physical partitions.

A tárolók számára kiépített átviteli sebesség egyenletesen oszlik el a fizikai partíciók között.Throughput provisioned for a container is divided evenly among physical partitions. A partíciós kulcs olyan kialakítása, amely nem terjeszti a kérelmeket, túl sok kérést eredményez a partíciók kis részhalmaza számára, amely "gyors" lesz.A partition key design that doesn't distribute requests evenly might result in too many requests directed to a small subset of partitions that become "hot." A gyakori partíciók a kiépített átviteli sebesség nem hatékony kihasználásához vezetnek, ami a ráta korlátozásával és a magasabb költségekkel járhat.Hot partitions lead to inefficient use of provisioned throughput, which might result in rate-limiting and higher costs.

A tároló fizikai partícióit a Azure Portal metrika panelének Storage (tárolás ) szakaszában tekintheti meg:You can see your container's physical partitions in the Storage section of the Metrics blade of the Azure portal:

Fizikai partíciók számának megtekintése

A fenti képernyőképen egy tároló /foodGroup a partíciós kulcs.In the above screenshot, a container has /foodGroup as the partition key. A gráf mindhárom bárja egy fizikai partíciót jelöl.Each of the three bars in the graph represents a physical partition. A rendszerképben a partíciós kulcs tartománya ugyanaz, mint a fizikai partíció.In the image, partition key range is the same as a physical partition. A kiválasztott fizikai partíció a legfelső 3 legjelentősebb logikai partíciót tartalmazza: Beef Products , Vegetable and Vegetable Products és Soups, Sauces, and Gravies .The selected physical partition contains the top 3 most significant size logical partitions: Beef Products, Vegetable and Vegetable Products, and Soups, Sauces, and Gravies.

Ha a másodpercenkénti 18 000-kérelmeket (RU/s) használja, akkor a három fizikai partíció esetében a teljes kiépített átviteli sebesség 1/3.If you provision a throughput of 18,000 request units per second (RU/s), then each of the three physical partition can utilize 1/3 of the total provisioned throughput. A kiválasztott fizikai partíción belül a logikai partíció kulcsai Beef Products , Vegetable and Vegetable Products és Soups, Sauces, and Gravies együttesen a fizikai partíció 6 000 kiépített ru/s-t használhatják.Within the selected physical partition, the logical partition keys Beef Products, Vegetable and Vegetable Products, and Soups, Sauces, and Gravies can, collectively, utilize the physical partition's 6,000 provisioned RU/s. Mivel a kiépített átviteli sebesség egyenletesen oszlik meg a tároló fizikai partíciói között, fontos, hogy olyan partíciós kulcsot válasszon, amely egyenletesen osztja el az átviteli sebességet a megfelelő logikai partíciós kulcs kiválasztásával.Because provisioned throughput is evenly divided across your container's physical partitions, it's important to choose a partition key that evenly distributes throughput consumption by choosing the right logical partition key.

Logikai partíciók kezeléseManaging logical partitions

Azure Cosmos DB átlátható módon, és automatikusan kezeli a logikai partíciók elhelyezését a fizikai partíciókon, hogy hatékonyan kielégítse a tároló méretezhetőségét és teljesítményét.Azure Cosmos DB transparently and automatically manages the placement of logical partitions on physical partitions to efficiently satisfy the scalability and performance needs of the container. Az alkalmazások adatátviteli és tárolási követelményeinek növekedésével Azure Cosmos DB a logikai partíciók mozgatásával automatikusan elosztja a terhelést a több fizikai partíció között.As the throughput and storage requirements of an application increase, Azure Cosmos DB moves logical partitions to automatically spread the load across a greater number of physical partitions. További információ a fizikai partíciókszolgáltatásról.You can learn more about physical partitions.

A Azure Cosmos DB kivonatoló particionálást használ a logikai partíciók fizikai partíciók közötti elterjesztéséhez.Azure Cosmos DB uses hash-based partitioning to spread logical partitions across physical partitions. Azure Cosmos DB kivonatok egy adott tétel partíciós kulcsának értékét.Azure Cosmos DB hashes the partition key value of an item. A kivonatos eredmény határozza meg a fizikai partíciót.The hashed result determines the physical partition. Ezután a Azure Cosmos DB a partíciós kulcsok kivonatait egyenletesen osztja el a fizikai partíciók között.Then, Azure Cosmos DB allocates the key space of partition key hashes evenly across the physical partitions.

A tranzakciókat (tárolt eljárásokban vagy eseményindítókban) csak egyetlen logikai partíció elemeire lehet engedélyezni.Transactions (in stored procedures or triggers) are allowed only against items in a single logical partition.

ReplikakészletekReplica sets

Mindegyik fizikai partíció replikák halmazát, más néven replikakészlet-készletet tartalmaz.Each physical partition consists of a set of replicas, also referred to as a replica set. Mindegyik replikakészlet az adatbázismotor egy példányát tárolja.Each replica set hosts an instance of the database engine. A replikakészlet a fizikai partícióban tárolt, tartós, magasan elérhető és konzisztens módon tárolja az adattárolási készletet.A replica set makes the data stored within the physical partition durable, highly available, and consistent. A fizikai partíciót alkotó replikák öröklik a partíció tárolási kvótáját.Each replica that makes up the physical partition inherits the partition's storage quota. A fizikai partíció összes replikája együttesen támogatja a fizikai partícióhoz lefoglalt átviteli sebességet.All replicas of a physical partition collectively support the throughput that's allocated to the physical partition. A Azure Cosmos DB automatikusan kezeli a replikákat.Azure Cosmos DB automatically manages replica sets.

A kisebb tárolók jellemzően csak egyetlen fizikai partíciót igényelnek, de továbbra is legalább 4 replikával rendelkeznek.Typically, smaller containers only require a single physical partition, but they will still have at least 4 replicas.

Az alábbi képen látható, hogyan vannak leképezve a logikai partíciók a globálisan elosztott fizikai partíciókhoz:The following image shows how logical partitions are mapped to physical partitions that are distributed globally:

Azure Cosmos DB particionálást bemutató rendszerkép

Partíciókulcs kiválasztásaChoosing a partition key

A partíciós kulcsnak két összetevője van: a partíciós kulcs elérési útja és a partíciós kulcs értéke.A partition key has two components: partition key path and the partition key value. Vegyünk például egy {"userId": "Andrew", "worksFor": "Microsoft"} elemet, ha a "felhasználóazonosító" a partíciós kulcsként van kiválasztva, a következő két partíciós kulcs összetevő:For example, consider an item { "userId" : "Andrew", "worksFor": "Microsoft" } if you choose "userId" as the partition key, the following are the two partition key components:

  • A partíciós kulcs elérési útja (például: "/userId").The partition key path (For example: "/userId"). A partíciós kulcs elérési útja alfanumerikus és aláhúzás () karaktereket fogad el.The partition key path accepts alphanumeric and underscore() characters. A beágyazott objektumokat a szabványos elérési út (/) használatával is használhatja.You can also use nested objects by using the standard path notation(/).

  • A partíciós kulcs értéke (például: "Andrew").The partition key value (For example: "Andrew"). A partíciós kulcs értéke lehet karakterlánc vagy numerikus típus.The partition key value can be of string or numeric types.

Az átviteli sebességre, a tárterületre és a partíciós kulcs hosszára vonatkozó korlátokkal kapcsolatos további tudnivalókért tekintse meg a Azure Cosmos db szolgáltatási kvótákat ismertető cikket.To learn about the limits on throughput, storage, and length of the partition key, see the Azure Cosmos DB service quotas article.

A partíciós kulcs kiválasztásával egy egyszerű, de fontos kialakítási lehetőség van a Azure Cosmos DB.Selecting your partition key is a simple but important design choice in Azure Cosmos DB. A partíciós kulcs kiválasztását követően nem lehet helyben módosítani.Once you select your partition key, it is not possible to change it in-place. Ha módosítania kell a partíciós kulcsot, helyezze át az adatait egy új tárolóba az új kívánt partíciós kulccsal.If you need to change your partition key, you should move your data to a new container with your new desired partition key.

Az összes tároló esetében a partíciós kulcsnak a következőket kell tennie:For all containers, your partition key should:

  • Olyan tulajdonságnak kell lennie, amely nem módosítható értékkel rendelkezik.Be a property that has a value which does not change. Ha a tulajdonság a partíciós kulcs, a tulajdonság értéke nem frissíthető.If a property is your partition key, you can't update that property's value.

  • Magas számossággal rendelkezik.Have a high cardinality. Más szóval a tulajdonságnak a lehetséges értékek széles körének kell lennie.In other words, the property should have a wide range of possible values.

  • A kérési egység (RU) felhasználásának és az adattárolásnak egyenletes elosztása az összes logikai partíción keresztül.Spread request unit (RU) consumption and data storage evenly across all logical partitions. Ez biztosítja a fizikai partíciók esetében is az RU-felhasználást és a tárolók eloszlását.This ensures even RU consumption and storage distribution across your physical partitions.

Ha Azure Cosmos DB több tételes savas tranzakcióra van szüksége, akkor tárolt eljárásokat vagy eseményindítókatkell használnia.If you need multi-item ACID transactions in Azure Cosmos DB, you will need to use stored procedures or triggers. Minden JavaScript-alapú tárolt eljárás és eseményindító hatóköre egyetlen logikai partícióra van korlátozva.All JavaScript-based stored procedures and triggers are scoped to a single logical partition.

Partíciós kulcsok olvasási-nehéz tárolók számáraPartition keys for read-heavy containers

A legtöbb tároló esetében a fenti feltételek csak a partíciós kulcsok kiválogatásakor szükségesek.For most containers, the above criteria is all you need to consider when picking a partition key. Nagyméretű, nehezen olvasható tárolók esetében azonban érdemes lehet olyan partíciós kulcsot választania, amely gyakran jelenik meg szűrőként a lekérdezésekben.For large read-heavy containers, however, you might want to choose a partition key that appears frequently as a filter in your queries. A lekérdezések hatékonyan irányíthatók úgy, hogy csak a megfelelő fizikai partíciók számára legyenek átirányítva , a Filter predikátumban található partíciós kulccsal együtt.Queries can be efficiently routed to only the relevant physical partitions by including the partition key in the filter predicate.

Ha a számítási feladatok nagy része lekérdezésekből áll, és a legtöbb lekérdezés egy egyenlőségi szűrővel rendelkezik ugyanazon a tulajdonságon, akkor ez a tulajdonság lehet jó partíciós kulcs választása.If most of your workload's requests are queries and most of your queries have an equality filter on the same property, this property can be a good partition key choice. Ha például gyakran futtat egy olyan lekérdezést, amely a szűrők alapján fut UserID , akkor UserID a partíciós kulcs kiválasztásával csökkentheti a több partíciós lekérdezésekszámát.For example, if you frequently run a query that filters on UserID, then selecting UserID as the partition key would reduce the number of cross-partition queries.

Ha azonban a tároló kicsi, valószínűleg nem rendelkezik elegendő fizikai partícióval, hogy ne kelljen aggódnia a több partíciós lekérdezések teljesítményére gyakorolt hatásával kapcsolatban.However, if your container is small, you probably don't have enough physical partitions to need to worry about the performance impact of cross-partition queries. Azure Cosmos DB a legtöbb kisméretű tárolóhoz csak egy vagy két fizikai partíció szükséges.Most small containers in Azure Cosmos DB only require one or two physical partitions.

Ha a tároló több fizikai partícióra is nőhet, akkor győződjön meg arról, hogy olyan partíciós kulcsot választ, amely a több partíciós lekérdezések minimalizálását végzi.If your container could grow to more than a few physical partitions, then you should make sure you pick a partition key that minimizes cross-partition queries. A tároló több fizikai partíciót is igényel, ha az alábbiak egyike igaz:Your container will require more than a few physical partitions when either of the following are true:

  • A tároló több mint 30 000 RU kiépítve leszYour container will have over 30,000 RU's provisioned

  • A tároló 100 GB-nál több adat tárolására is alkalmasYour container will store over 100 GB of data

Az Item ID használata partíciós kulcskéntUsing item ID as the partition key

Ha a tároló olyan tulajdonsággal rendelkezik, amely a lehetséges értékek széles választékával rendelkezik, valószínűleg nagyszerű partíciós kulcsra van kiválasztva.If your container has a property that has a wide range of possible values, it is likely a great partition key choice. Ilyen tulajdonság egy lehetséges példa az Item azonosító.One possible example of such a property is the item ID. A kis olvasási nehéz tárolók vagy a nagy méretű írható tárolók esetében az elem azonosítója természetesen remek választás a partíciós kulcshoz.For small read-heavy containers or write-heavy containers of any size, the item ID is naturally a great choice for the partition key.

A rendszertulajdonság- azonosító a tároló minden eleme esetében létezik.The system property item ID exists in every item in your container. Lehet, hogy más tulajdonságokkal rendelkezik, amelyek az adott eleme logikai AZONOSÍTÓját jelölik.You may have other properties that represent a logical ID of your item. Sok esetben a partíciós kulcsra vonatkozó döntések is megegyeznek az elem azonosítójának indokairól.In many cases, these are also great partition key choices for the same reasons as the item ID.

Az azonosító egy nagyszerű partíciós kulcs, amely a következő okok miatt választható:The item ID is a great partition key choice for the following reasons:

  • A lehetséges értékek széles választéka (egy egyedi azonosító /tétel).There are a wide range of possible values (one unique item ID per item).
  • Mivel egy elemhez egyedi elem-azonosító van, az elem azonosítója nagyszerű feladatot jelent az ru-használat és az adattárolás egyenletes elosztásával.Because there is a unique item ID per item, the item ID does a great job at evenly balancing RU consumption and data storage.
  • Egyszerűen elvégezheti a hatékony pontok olvasását, mivel a rendszer mindig ismeri az elemek partíciós kulcsát, ha ismeri annak azonosítóját.You can easily do efficient point reads since you'll always know an item's partition key if you know its item ID.

Az elemek azonosítójának kiválasztásakor figyelembe kell venni az alábbiakat:Some things to consider when selecting the item ID as the partition key include:

  • Ha az elem azonosítója a partíciós kulcs, akkor a teljes tárolóban egyedi azonosító lesz.If the item ID is the partition key, it will become a unique identifier throughout your entire container. Nem lesz lehetősége ismétlődő elem-azonosítóval rendelkező elemekre.You won't be able to have items that have a duplicate item ID.
  • Ha olyan nagy mennyiségű fizikai partícióvalrendelkező olvasási nehéz tárolóval rendelkezik, a lekérdezések hatékonyabbak lesznek, ha az elem azonosítójának megfelelő egyenlőségi szűrővel rendelkeznek.If you have a read-heavy container that has a lot of physical partitions, queries will be more efficient if they have an equality filter with the item ID.
  • Nem futtathat tárolt eljárásokat vagy eseményindítókat több logikai partíción keresztül.You can't run stored procedures or triggers across multiple logical partitions.

Következő lépésekNext steps