Enheter för programbegäran i Azure Cosmos DB
GÄLLER FÖR: NoSQL MongoDB Kassandra Gremlin Bord
Azure Cosmos DB stöder många API:er, till exempel SQL, MongoDB, Cassandra, Gremlin och Table. Varje API har en egen uppsättning databasåtgärder. Dessa åtgärder sträcker sig från enkla punktläsningar och skrivningar till komplexa frågor. Varje databasåtgärd förbrukar systemresurser baserat på åtgärdens komplexitet.
Azure Cosmos DB normaliserar kostnaden för alla databasåtgärder med hjälp av enheter för programbegäran (eller RU:er, för kort tid) och mäter kostnader baserat på dataflöde (enheter för begäranden per sekund, RU/s).
Begärandeenheten är en prestandavaluta som abstraherar systemresurser som CPU, IOPS och minne som krävs för att utföra de databasåtgärder som stöds av Azure Cosmos DB. Oavsett om databasåtgärden är en skriv-, punktläsnings- eller fråga mäts åtgärder alltid i RU:er. Till exempel är en punktläsning (hämtar ett enskilt objekt med dess ID och partitionsnyckelvärde) för ett 1 KB-objekt en begäransenhet (eller en RU), oavsett vilket API du använder för att interagera med din Azure Cosmos DB-container. Du kan modellera dina dataflödeskostnader med hjälp av Kapacitetskalkylatorn för Azure Cosmos DB.
Följande bild illustrerar den övergripande tanken med RU:er:
För att hantera och planera kapacitet ser Azure Cosmos DB till att antalet RU:er för en given databasåtgärd som avser en given datamängd är deterministisk. Du kan granska svarshuvudet för att spåra antalet RU:er som förbrukas av en databasåtgärd. När du förstår de faktorer som påverkar RU-kostnaderna och dataflödeskraven för ditt program kan du köra programmet kostnadseffektivt.
Vilken typ av Azure Cosmos DB-konto du använder avgör hur förbrukade RU:er debiteras. Det finns tre lägen i vilka du kan skapa ett konto:
Etablerat dataflödesläge: I det här läget tilldelar du antalet RU:er för ditt program per sekund i steg om 100 RU:er per sekund. Om du vill skala om ditt programs etablerade dataflöde kan du när som helst öka eller minska antalet RU/s i inkrementella steg om 100 RU:er. Du kan göra ändringarna med hjälp av programmering eller via Azure-portalen. Du debiteras per timma för det antal RU:er per sekund som du har etablerat. Mer information finns i artikeln Etablerat dataflöde.
Du kan etablera dataflöde för två specifika kornigheter:
- Containrar: Mer information finns i Tilldela dataflöde till en Azure Cosmos DB-container.
- Databaser: Mer information finns i Tilldela dataflöde till en Azure Cosmos DB-databas.
Serverlöst läge: I det här läget behöver du inte tilldela något dataflöde när du skapar resurser i ditt Azure Cosmos DB-konto. I slutet av faktureringsperioden debiteras du för det antal enheter för programbegäran som har förbrukats av databasåtgärderna. Mer information finns i artikeln Serverlöst dataflöde.
Autoskalningsläge: I det här läget kan du automatiskt och omedelbart skala dataflödet (RU/s) för databasen eller containern baserat på dess användning. Den här skalningsåtgärden påverkar inte arbetsbelastningens tillgänglighet, svarstid, dataflöde eller prestanda. Det här läget passar bra för verksamhetskritiska arbetsbelastningar som har varierande eller oförutsägbara trafikmönster och som kräver serviceavtal med höga prestanda och skala. Mer information finns i artikeln om dataflöde för autoskalning.
Tänk på följande faktorer när du beräknar antalet RU:er som förbrukas av din arbetsbelastning:
Objektstorlek: När storleken på ett objekt ökar ökar även antalet RU:er som används för att läsa eller skriva objektet.
Objektindexering: Som standard indexeras varje objekt automatiskt. Färre enheter för programbegäran används om du väljer att inte indexera vissa av objekten i en container.
Antal objektegenskaper: Förutsatt att standardindexeringen finns på alla egenskaper ökar antalet RU:er som används för att skriva ett objekt när antalet objektegenskaper ökar.
Indexerade egenskaper: En indexprincip för varje container avgör vilka egenskaper som indexeras som standard. Om du vill minska förbrukningen av enheter för programbegäran för skrivåtgärder bör du begränsa antalet indexerade egenskaper.
Datakonsekvens: De starka och begränsade föråldringskonsekvensnivåerna förbrukar ungefär två gånger fler RU:er medan läsåtgärder utförs jämfört med andra avslappnade konsekvensnivåer.
Typ av läsningar: Punktläsningar kostar färre RU:er än frågor.
Frågemönster: Komplexiteten i en fråga påverkar hur många RU:er som används för en åtgärd. Faktorer som påverkar kostnaden för frågeåtgärder omfattar:
- Antalet frågeresultat
- Antalet predikat
- Predikatens karaktär
- Antalet användardefinierade funktioner
- Storleken på källdata
- Storleken på resultatuppsättningen
- Projektioner
Samma fråga på samma data kostar alltid samma antal RU:er vid upprepade körningar.
Skriptanvändning: Precis som med frågor använder lagrade procedurer och utlösare RU:er baserat på komplexiteten i de åtgärder som utförs. När du utvecklar ditt program kan du läsa rubriken för begärandekostnad för att få mer information om hur mycket RU-kapacitet varje åtgärd förbrukar.
Om du tilldelar "R" -RU:er på en Azure Cosmos DB-container (eller databas) ser Azure Cosmos DB till att RU :er är tillgängliga i varje region som är associerad med ditt Azure Cosmos DB-konto. Du kan inte selektivt tilldela RU:er till en viss region. Ru:erna som etableras på en Azure Cosmos DB-container (eller databas) etableras i alla regioner som är associerade med ditt Azure Cosmos DB-konto.
Förutsatt att en Azure Cosmos DB-container har konfigurerats med R-RU:er och det finns N-regioner som är associerade med Azure Cosmos DB-kontot, är det totala antalet RU:er som är tillgängliga globalt på containern = R x N.
Ditt val av konsekvensmodell påverkar också dataflödet. Du kan få ungefär 2 x läsdataflöde för de mer avslappnade konsekvensnivåerna (session, *konsekvent prefix och slutlig konsekvens) jämfört med starkare konsekvensnivåer (begränsad inaktuellhet eller stark konsekvens).