Dela via


Optimera skrivprestandan i Azure Cosmos DB för MongoDB

GÄLLER FÖR: MongoDB

Genom att optimera skrivprestanda får du ut mesta möjliga av Azure Cosmos DB för MongoDB:s obegränsade skala. Till skillnad från andra hanterade MongoDB-tjänster partitionerar API:et för MongoDB automatiskt och transparent dina samlingar åt dig (när du använder fragmenterade samlingar) för att skala oändligt.

Sättet du skriver data på måste vara uppmärksamt på detta genom att parallellisera och sprida data över shards för att få ut mesta möjliga av dina databaser och samlingar. I den här artikeln beskrivs metodtips för att optimera skrivprestanda.

Sprida belastningen över dina shards

När du skriver data till ett fragmenterat API för MongoDB-samlingen delas dina data upp (fragmenterade) i små sektorer och skrivs till varje shard baserat på värdet för shardnyckelfältet. Du kan se varje sektor som en liten del av en virtuell dator som bara lagrar dokument som innehåller ett unikt shardnyckelvärde.

Om ditt program skriver en enorm mängd data till en enda shard blir det inte effektivt eftersom appen skulle maxa dataflödet för endast en shard i stället för att sprida belastningen över alla dina shards. Skrivbelastningen fördelas jämnt över samlingen genom att skriva parallellt med många dokument med unika värden för shardnyckeln.

Ett exempel på detta är ett produktkatalogprogram som är fragmenterat i kategorifältet. I stället för att skriva till en kategori (shard) i taget är det bättre att skriva till alla kategorier samtidigt för att uppnå maximalt skrivdataflöde.

Minska antalet index

Indexering är en bra funktion för att drastiskt minska den tid det tar att fråga dina data. För den mest flexibla frågeupplevelsen aktiverar API:et för MongoDB ett jokerteckenindex för dina data som standard för att göra frågor mot alla fält blixtsnabbt. Men alla index, som inkluderar jokerteckenindex, medför ytterligare belastning när du skriver data eftersom skrivningar ändrar samlingen och indexen.

Om du bara minskar antalet index till de index som du behöver för att stödja dina frågor blir dina skrivningar snabbare och billigare. Som en allmän regel rekommenderar vi följande:

  • Alla fält som du filtrerar på bör ha ett motsvarande enfältsindex för det. Det här alternativet möjliggör även filtrering med flera fält.
  • Alla fältgrupper som du sorterar efter bör ha ett sammansatt index för den gruppen.

Ange ordnad till false i MongoDB-drivrutinerna

Som standard anger MongoDB-drivrutinerna det ordnade alternativet till "sant" när du skriver data, som skriver varje dokument i ordning en i taget. Det här alternativet minskar skrivprestanda eftersom varje skrivbegäran måste vänta tills den föregående har slutförts. När du skriver data anger du det här alternativet till false för att förbättra prestandan.

db.collection.insertMany(
   [ <doc1> , <doc2>, ... ],
   {
      ordered: false
   }
)

Justera för den optimala batchstorleken och trådantalet

Parallellisering av skrivåtgärder mellan många trådar/processer är nyckeln till att skala skrivningar. API:et för MongoDB accepterar skrivningar i batchar med upp till 1 000 dokument för varje process/tråd.

Om du skriver fler än 1 000 dokument åt gången per process/tråd bör klientfunktioner som insertMany() bör begränsas till ungefär 1 000 dokument. Annars väntar klienten på att varje batch ska checkas in innan den går vidare till nästa batch. I vissa fall går det snabbare att dela upp batcharna med färre eller drygt 1 000 dokument.

Nästa steg