Introduktion till etablerat dataflöde i Azure Cosmos DB
GÄLLER FÖR: NoSQL MongoDB Kassandra Gremlin Bord
Med Azure Cosmos DB kan du ange etablerat dataflöde för dina databaser och containrar. Det finns två typer av etablerat dataflöde, standard (manuell) eller autoskalning. Den här artikeln ger en översikt över hur etablerat dataflöde fungerar.
En Azure Cosmos DB-databas är en hanteringsenhet för en uppsättning containrar. En databas består av en uppsättning schemaoberoende containrar. En Azure Cosmos DB-container är skalbarhetsenheten för både dataflöde och lagring. En container partitioneras horisontellt över en uppsättning datorer i en Azure-region och distribueras över alla Azure-regioner som är associerade med ditt Azure Cosmos DB-konto.
Med Azure Cosmos DB kan du etablera dataflöde med två kornigheter:
- Azure Cosmos DB-containrar
- Azure Cosmos DB-databaser
Ange dataflöde för en container
Dataflödet som etableras på en Azure Cosmos DB-container är exklusivt reserverat för containern. Containern tar emot det etablerade dataflödet hela tiden. Det etablerade dataflödet på en container backas upp ekonomiskt av serviceavtal. Information om hur du konfigurerar standarddataflöde (manuellt) för en container finns i Etablera dataflöde i en Azure Cosmos DB-container. Information om hur du konfigurerar autoskalningsdataflöde för en container finns i Etablera dataflöde för automatisk skalning.
Det vanligaste alternativet är att ange etablerat dataflöde för en container. Du kan elastiskt skala dataflödet för en container genom att etablera valfri mängd dataflöde med hjälp av enheter för programbegäran (RU:er).
Dataflödet som etableras för en container är jämnt fördelat mellan dess fysiska partitioner, och förutsatt att en bra partitionsnyckel distribuerar de logiska partitionerna jämnt mellan de fysiska partitionerna, fördelas dataflödet även jämnt över alla logiska partitioner i containern. Du kan inte selektivt ange dataflödet för logiska partitioner. Eftersom en eller flera logiska partitioner av en container hanteras av en fysisk partition, tillhör de fysiska partitionerna uteslutande containern och stöder det dataflöde som etablerats på containern.
Om arbetsbelastningen som körs på en logisk partition förbrukar mer än det dataflöde som allokerades till den underliggande fysiska partitionen är det möjligt att dina åtgärder är hastighetsbegränsade. Det som kallas för en frekvent partition inträffar när en logisk partition har oproportionerligt många begäranden än andra partitionsnyckelvärden.
När hastighetsbegränsning sker kan du antingen öka det etablerade dataflödet för hela containern eller försöka utföra åtgärderna igen. Du bör också se till att du väljer en partitionsnyckel som distribuerar lagrings- och begärandevolymen jämnt. Mer information om partitionering finns i Partitionering och horisontell skalning i Azure Cosmos DB.
Vi rekommenderar att du konfigurerar dataflödet i containerns kornighet när du vill ha förutsägbara prestanda för containern.
Följande bild visar hur en fysisk partition är värd för en eller flera logiska partitioner av en container:
Ange dataflöde för en databas
När du etablerar dataflöde i en Azure Cosmos DB-databas delas dataflödet mellan alla containrar (så kallade delade databascontainrar) i databasen. Ett undantag är om du har angett ett etablerat dataflöde för specifika containrar i databasen. Att dela det etablerade dataflödet på databasnivå mellan dess containrar är detsamma som att vara värd för en databas på ett kluster med datorer. Eftersom alla containrar i en databas delar de resurser som är tillgängliga på en dator får du naturligtvis inte förutsägbara prestanda för någon specifik container. Information om hur du konfigurerar etablerat dataflöde i en databas finns i Konfigurera etablerat dataflöde i en Azure Cosmos DB-databas. Information om hur du konfigurerar autoskalningsdataflöde för en databas finns i Etablera dataflöde för autoskalning.
Eftersom alla containrar i databasen delar det etablerade dataflödet tillhandahåller Azure Cosmos DB inga förutsägbara dataflödesgarantier för en viss container i databasen. Den del av dataflödet som en specifik container kan ta emot är beroende av:
- Antalet containrar.
- Valet av partitionsnycklar för olika containrar.
- Fördelningen av arbetsbelastningen mellan olika logiska partitioner i containrarna.
Vi rekommenderar att du konfigurerar dataflödet i en databas när du vill dela dataflödet över flera containrar, men inte vill ägna dataflödet till någon viss container.
Följande exempel visar var det är föredraget att etablera dataflöde på databasnivå:
Att dela en databas etablerade dataflöde över en uppsättning containrar är användbart för ett program med flera klientorganisationer. Varje användare kan representeras av en distinkt Azure Cosmos DB-container.
Det är användbart att dela en databass etablerade dataflöde över en uppsättning containrar när du migrerar en NoSQL-databas, till exempel MongoDB eller Cassandra, som finns i ett kluster med virtuella datorer eller från lokala fysiska servrar till Azure Cosmos DB. Tänk på det etablerade dataflödet som konfigurerats i din Azure Cosmos DB-databas som en logisk motsvarighet, men mer kostnadseffektiv och elastisk, till beräkningskapaciteten för ditt MongoDB- eller Cassandra-kluster.
Alla containrar som skapas i en databas med etablerat dataflöde måste skapas med en partitionsnyckel. Vid en viss tidpunkt distribueras dataflödet som allokerats till en container i en databas över alla logiska partitioner i containern. När du har containrar som delar etablerat dataflöde som konfigurerats i en databas kan du inte selektivt tillämpa dataflödet på en specifik container eller en logisk partition.
Om arbetsbelastningen på en logisk partition förbrukar mer än det dataflöde som allokeras till en specifik logisk partition är dina åtgärder hastighetsbegränsade. När hastighetsbegränsning sker kan du antingen öka dataflödet för hela databasen eller försöka utföra åtgärderna igen. Mer information om partitionering finns i Logiska partitioner.
Containrar i en databas med delat dataflöde delar på dataflödet (RU/s) som allokerats till databasen. Med standardetablerade dataflöden (manuella) kan du ha upp till 25 containrar med minst 400 RU/s i databasen. Med autoskalningsetablerad dataflöde kan du ha upp till 25 containrar i en databas med autoskalning på minst 1 000 RU/s (skalar mellan 100 och 1 000 RU/s).
Kommentar
I februari 2020 introducerade vi en ändring som gör att du kan ha maximalt 25 containrar i en databas med delat dataflöde, vilket ger bättre en delning av dataflödet mellan containrarna. Efter de första 25 containrarna kan du bara lägga till fler containrar i databasen om de etableras med dedikerat dataflöde, som är separat från databasens delade dataflöde.
Om ditt Azure Cosmos DB-konto redan innehåller en databas för delat dataflöde med >=25 containrar undantas kontot och alla andra konton i samma Azure-prenumeration från den här ändringen. Kontakta produktsupporten om du har feedback eller frågor.
Om dina arbetsbelastningar innebär att ta bort och återskapa alla samlingar i en databas rekommenderar vi att du släpper den tomma databasen och återskapar en ny databas innan samlingen skapas. Följande bild visar hur en fysisk partition kan vara värd för en eller flera logiska partitioner som tillhör olika containrar i en databas:
Ange dataflöde för en databas och en container
Du kan kombinera de två modellerna. Etablering av dataflöde för både databasen och containern tillåts. I följande exempel visas hur du etablerar standarddataflöde (manuell) i en Azure Cosmos DB-databas och en container:
Du kan skapa en Azure Cosmos DB-databas med namnet Z med standardetablerade (manuella) dataflöden för "K" -RU:er.
Skapa sedan fem containrar med namnet A, B, C, D och E i databasen. När du skapar container B måste du aktivera Etablera dedikerat dataflöde för det här containeralternativet och uttryckligen konfigurera "P" RU:er för etablerat dataflöde i den här containern. Du kan bara konfigurera delat och dedikerat dataflöde när du skapar databasen och containern.
Dataflödet "K" RU/s delas mellan de fyra containrarna A, C, D och E. Den exakta mängden dataflöde som är tillgängligt för A, C, D eller E varierar. Det finns inga serviceavtal för varje enskild containers dataflöde.
Containern med namnet B får garanterat "P" RU/s-dataflödet hela tiden. Den backas upp av serviceavtal.
Kommentar
Det går inte att konvertera en container med etablerat dataflöde till en delad databascontainer. Omvänt kan inte en delad databascontainer konverteras till ett dedikerat dataflöde. Du måste flytta data till en container med önskad dataflödesinställning. (Containerkopieringsjobb för NoSQL-, MongoDB- och Cassandra-API:er hjälper till med den här processen.)
Uppdatera dataflödet i en databas eller en container
När du har skapat en Azure Cosmos DB-container eller en databas kan du uppdatera det etablerade dataflödet. Det finns ingen gräns för det maximala etablerade dataflödet som du kan konfigurera i databasen eller containern.
Aktuellt etablerat dataflöde
Du kan hämta det etablerade dataflödet för en container eller en databas i Azure-portalen eller med hjälp av SDK:erna:
- Container.ReadThroughputAsync på .NET SDK.
- CosmosContainer.readThroughput på Java SDK.
Svaret från dessa metoder innehåller också det minsta etablerade dataflödet för containern eller databasen:
- ThroughputResponse.MinThroughput på .NET SDK.
- ThroughputResponse.getMinThroughput() i Java SDK.
Den faktiska lägsta RU/s kan variera beroende på din kontokonfiguration. Mer information finns i vanliga frågor och svar om autoskalning.
Ändra det etablerade dataflödet
Du kan skala det etablerade dataflödet för en container eller en databas via Azure-portalen eller med hjälp av SDK:erna:
- Container.ReplaceThroughputAsync på .NET SDK.
- CosmosContainer.replaceThroughput i Java SDK.
Om du minskar det etablerade dataflödet kan du göra det till ett minimum.
Om du ökar det etablerade dataflödet är åtgärden för det mesta omedelbar. Det finns dock fall där åtgärden kan ta längre tid på grund av systemuppgifterna för att etablera nödvändiga resurser. I det här fallet ger ett försök att ändra det etablerade dataflödet medan den här åtgärden pågår ett HTTP 423-svar med ett felmeddelande som förklarar att en annan skalningsåtgärd pågår.
Läs mer i artikeln Best practices for scaling provisioned throughput (RU/s).
Kommentar
Om du planerar för en mycket stor inmatningsarbetsbelastning som kräver en stor ökning av etablerat dataflöde bör du tänka på att skalningsåtgärden inte har något serviceavtal och, som nämndes i föregående stycke, kan det ta lång tid när ökningen är stor. Du kanske vill planera i förväg och starta skalningen innan arbetsbelastningen startar och använda metoderna nedan för att kontrollera förloppet.
Du kan programmatiskt kontrollera skalningsstatusen genom att läsa det aktuella etablerade dataflödet och använda:
- ThroughputResponse.IsReplacePending på .NET SDK.
- ThroughputResponse.isReplacePending() på Java SDK.
Du kan använda Azure Monitor-mått för att visa historiken för etablerat dataflöde (RU/s) och lagring på en resurs.
Jämförelse av modeller
Den här tabellen visar en jämförelse mellan etablering av standarddataflöde (manuellt) för en databas jämfört med en container.
Parameter | Standarddataflöde (manuellt) i en databas | Standarddataflöde (manuellt) för en container | Autoskalning av dataflöde i en databas | Autoskalning av dataflöde i en container |
---|---|---|---|---|
Startpunkt (minsta RU/s) | 400 RU/s. Kan ha upp till 25 containrar utan MINSTA RU/s per container. | 400 | Autoskalning mellan 100 och 1 000 RU/s. Kan ha upp till 25 containrar utan MINSTA RU/s per container. | Autoskalning mellan 100 och 1 000 RU/s. |
Minsta RU/s per container | -- | 400 | -- | Autoskalning mellan 100 och 1 000 RU/s |
Maximalt antal RU:er | Obegränsad i databasen. | Obegränsat, på containern. | Obegränsad i databasen. | Obegränsat, på containern. |
Ru:er som tilldelats eller är tillgängliga för en specifik container | Inga garantier. RU:er som tilldelats en viss container beror på egenskaperna. Egenskaper kan vara valet av partitionsnycklar för containrar som delar dataflödet, fördelningen av arbetsbelastningen och antalet containrar. | Alla RU:er som konfigurerats i containern är uteslutande reserverade för containern. | Inga garantier. RU:er som tilldelats en viss container beror på egenskaperna. Egenskaper kan vara valet av partitionsnycklar för containrar som delar dataflödet, fördelningen av arbetsbelastningen och antalet containrar. | Alla RU:er som konfigurerats i containern är uteslutande reserverade för containern. |
Maximalt lagringsutrymme för en container | Obegränsad. | Obegränsat | Obegränsat | Obegränsat |
Maximalt dataflöde per logisk partition för en container | 10 000 RU/s | 10 000 RU/s | 10 000 RU/s | 10 000 RU/s |
Maximal lagring (data + index) per logisk partition i en container | 20 GB | 20 GB | 20 GB | 20 GB |
Nästa steg
- Läs mer om logiska partitioner.
- Lär dig hur du etablerar standard (manuell) på en Azure Cosmos DB-container.
- Lär dig hur du etablerar standarddataflöde (manuellt) i en Azure Cosmos DB-databas.
- Lär dig hur du etablerar autoskalningsdataflöde i en Azure Cosmos DB-databas eller container.
- Försöker du planera kapacitet för en migrering till Azure Cosmos DB? Du kan använda information om ditt befintliga databaskluster för kapacitetsplanering.
- Om allt du vet är antalet virtuella kärnor och servrar i ditt befintliga databaskluster läser du om att uppskatta enheter för begäranden med virtuella kärnor eller virtuella kärnor
- Om du känner till vanliga begärandefrekvenser för din aktuella databasarbetsbelastning kan du läsa om att uppskatta enheter för begäranden med azure Cosmos DB-kapacitetshanteraren