Partizionamento in Azure Cosmos DBPartitioning in Azure Cosmos DB

Azure Cosmos DB usa il partizionamento per ridimensionare i singoli contenitori in un database per soddisfare le esigenze di prestazioni dell'applicazione.Azure Cosmos DB uses partitioning to scale individual containers in a database to meet the performance needs of your application. Nel partizionamento, gli elementi in un contenitore sono suddivisi in sottoinsiemi distinti denominati partizioni logiche.In partitioning, the items in a container are divided into distinct subsets called logical partitions. Le partizioni logiche sono formate in base al valore di una chiave di partizione associata a ogni elemento in un contenitore.Logical partitions are formed based on the value of a partition key that is associated with each item in a container. Tutti gli elementi in una partizione logica hanno lo stesso valore di chiave di partizione.All items in a logical partition have the same partition key value.

Ad esempio, un contenitore contiene elementi.For example, a container holds items. Ogni elemento ha un UserID valore univoco per la proprietà.Each item has a unique value for the UserID property. Se UserID funge da chiave di partizione per gli elementi nel UserID contenitore e sono presenti 1.000 valori univoci, vengono create 1.000 partizioni logiche per il contenitore.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.

Oltre a una chiave di partizione che determina la partizione logica dell'elemento, ogni elemento in un contenitore ha un ID elemento (univoco all'interno di una partizione logica).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). La combinazione della chiave di partizione e dell'ID elemento crea l'indicedell'elemento, che identifica in modo univoco l'elemento.Combining the partition key and the item ID creates the item's index, which uniquely identifies the item.

La scelta di una chiave di partizione è una decisione importante che influirà sulle prestazioni dell'applicazione.Choosing a partition key is an important decision that will affect your application’s performance.

Gestione delle partizioni logicheManaging logical partitions

Azure Cosmos DB gestisce in modo trasparente e automatico il posizionamento delle partizioni logiche nelle partizioni fisiche per soddisfare in modo efficiente le esigenze di scalabilità e prestazioni del contenitore.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. Con l'aumentare della velocità effettiva e dei requisiti di archiviazione di un'applicazione, Azure Cosmos DB sposta le partizioni logiche per distribuire automaticamente il carico in un numero maggiore di server.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 servers.

Azure Cosmos DB usa il partizionamento basato su hash per distribuire le partizioni logiche tra le partizioni fisiche.Azure Cosmos DB uses hash-based partitioning to spread logical partitions across physical partitions. Azure Cosmos DB analizza il valore della chiave di partizione di un elemento.Azure Cosmos DB hashes the partition key value of an item. Il risultato hash determina la partizione fisica.The hashed result determines the physical partition. Quindi, Azure Cosmos DB alloca lo spazio chiave degli eventi delle chiavi di partizione in modo uniforme tra le partizioni fisiche.Then, Azure Cosmos DB allocates the key space of partition key hashes evenly across the physical partitions.

Le query che accedono ai dati all'interno di una singola partizione logica sono più convenienti rispetto alle query che accedono a più partizioni.Queries that access data within a single logical partition are more cost-effective than queries that access multiple partitions. Le transazioni (in stored procedure o trigger) sono consentite solo per gli elementi in una singola partizione logica.Transactions (in stored procedures or triggers) are allowed only against items in a single logical partition.

Per altre informazioni su come Azure Cosmos DB gestisce le partizioni, vedere Partizioni logiche.To learn more about how Azure Cosmos DB manages partitions, see Logical partitions. (Non è necessario comprendere i dettagli interni per compilare o eseguire le applicazioni, ma aggiunto qui per un lettore curioso.)(It's not necessary to understand the internal details to build or run your applications, but added here for a curious reader.)

Scelta di una chiave di partizioneChoosing a partition key

Di seguito è riportata una buona guida per la scelta di una chiave di partizione:The following is a good guidance for choosing a partition key:The following is a good guidance for choosing a partition key:

  • Una singola partizione logica ha un limite massimo di 20 GB di spazio di archiviazione.A single logical partition has an upper limit of 20 GB of storage.

  • I contenitori Cosmos di Azure hanno una velocità effettiva minima di 400 unità di richiesta al secondo (RU/s).Azure Cosmos containers have a minimum throughput of 400 request units per second (RU/s). Quando viene eseguito il provisioning della velocità effettiva in un database, le RU minime per contenitore sono 100 unità richiesta al secondo (RU/s).When throughput is provisioned on a database, minimum RUs per container is 100 request units per second (RU/s). Le richieste alla stessa chiave di partizione non possono superare la velocità effettiva allocata a una partizione.Requests to the same partition key can't exceed the throughput that's allocated to a partition. Se le richieste superano la velocità effettiva allocata, le richieste sono limitate.If requests exceed the allocated throughput, requests are rate-limited. È quindi importante scegliere una chiave di partizione che non generi "aree sensibili" nell'applicazione.So, it's important to pick a partition key that doesn't result in "hot spots" within your application.

  • Scegliere una chiave di partizione con una vasta gamma di valori e modelli di accesso distribuiti uniformemente tra le partizioni logiche.Choose a partition key that has a wide range of values and access patterns that are evenly spread across logical partitions. Ciò consente di distribuire i dati e l'attività nel contenitore tra il set di partizioni logiche, in modo che le risorse per l'archiviazione dei dati e la velocità effettiva possano essere distribuite tra le partizioni logiche.This helps spread the data and the activity in your container across the set of logical partitions, so that resources for data storage and throughput can be distributed across the logical partitions.

  • Scegliere una chiave di partizione che distribuisca il carico di lavoro in modo uniforme tra tutte le partizioni e uniformemente nel tempo.Choose a partition key that spreads the workload evenly across all partitions and evenly over time. La scelta della chiave di partizione deve bilanciare la necessità di query e transazioni di partizione efficienti con l'obiettivo di distribuire gli elementi tra più partizioni per ottenere la scalabilità.Your choice of partition key should balance the need for efficient partition queries and transactions against the goal of distributing items across multiple partitions to achieve scalability.

  • I candidati per le chiavi di partizione possono includere proprietà che vengono visualizzate di frequente come filtro nelle query.Candidates for partition keys might include properties that appear frequently as a filter in your queries. Le query possono essere indirizzate in modo efficiente includendo la chiave di partizione nel predicato del filtro.Queries can be efficiently routed by including the partition key in the filter predicate.

Passaggi successiviNext steps