Dela via


Ändra Stream på Azure DocumentDB

Ändringsströmmar är en realtidsström med databasändringar som flödar från databasen till ditt program. Med den här funktionen kan du skapa reaktiva program genom att prenumerera på databasändringar, vilket eliminerar behovet av kontinuerlig avsökning för att identifiera ändringar.

Anmärkning

Azure DocumentDB stöder för närvarande Change Stream i kluster med en enda shard. Vi arbetar aktivt med att ge Change Stream-stöd för kluster med flera shardar inom en snar framtid.

Azure DocumentDB tillämpar en systemhanterad logggräns på 400 MB för ändringsströmmar. Kunder bör bearbeta Ändringsströmmar kontinuerligt för att undvika att historiska ändringshändelser saknas. Förändringsströmmar använder systemhanterade loggar med en storleksgräns på 400 MB. Om en återstartstoken refererar till en ändringshändelse som har rullat bort från loggen kan ändringsströmmen inte återupptas från den punkten och behöver startas om. Vi planerar en förhandsversion för utökat stöd inom en snar framtid.

Aktivera ändringsströmmar

Du kan aktivera eller inaktivera den här funktionen med hjälp av Azure CLI eller en ARM-mall. Portalstöd kommer snart att läggas till.

Steg för att aktivera ändringsströmmar i klustret via CLI

  1. Logga in på Azure CLI
az login
  1. Hämta de aktuella inställningarna för funktionsflaggor i klustret. Detta säkerställer att du behåller alla befintliga flaggor när du lägger till den nya funktionen.
az resource show --ids "/subscriptions/<sub id>/resourceGroups/<resource group name>/providers/Microsoft.DocumentDB/mongoClusters/<resource name of your Azure DocumentDB cluster>" --api-version 2024-10-01-preview
  1. Skicka PATCH-begäran för att aktivera funktionen.
az resource patch --ids "/subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.DocumentDB/mongoClusters/<cluster-name>" --api-version 2024-10-01-preview --properties "{\"previewFeatures\": [ \"ChangeStreams\"]}"
  1. Kontrollera resultatet:
    • Se till att svarsnyttolasten innehåller "previewFeatures": ["ChangeStreams"].
    • Om du får felet "ändringsströmmar stöds inte i det här klustret" skapar du en supportbegäran.

Konfigurera ändringsströmmar

Den här exempelkoden initierar en ändringsström i exampleCollection samlingen och övervakar kontinuerligt eventuella ändringar. När en ändring identifieras hämtar den ändringshändelsen och skriver ut den i JSON-format.

// Open a change stream
const changeStream = db.exampleCollection.watch();

// Listen for changes
while (changeStream.hasNext()) 
    {
        const change = changeStream.next();
        printjson(change);
    }

Viktigt!

Ändringsströmmar kan återupptas genom att ange en återuppta-token till resumeAfter när markören öppnas. Det förväntas dock att det finns tillräckligt med historik för att hitta operationen som är associerad med token. Dokumentet som observerats i ändringsströmmen i _id fältet representerar den återanvändbara token.

cursor = db.exampleCollection.watch(resume_after=resume_token)

Övervaka databasändringar med Change Stream

Nu ska vi förstå utdata från ändringsströmmen via exemplet.

I denna förändringsströmhändelse ser vi att en ny post inserted tillades i exampleCollection-samlingen i cs-databasen, och händelseinformationen innehåller det fullständiga innehållet i det nyligen tillagda dokumentet.

{
  "_id": { "_data": "AeARBpQ/AAAA" }, // "resume_token"
  "operationType": "insert",
  "fullDocument": {
    "_id": { "$oid": "66e6f63e6f49ecaabf794958" },
    "employee_id": "17986",
    "name": "John",
    "position": "Software Engineer",
    "department": "IT",
    "rating": 4
  },
  "ns": { "db": "cs", "coll": "exampleCollection" },
  "documentKey": { "_id": { "$oid": "66e6f63e6f49ecaabf794958" } }
}

Anpassa data i Change Stream

Anpassa dina utdata för ändringsströmmen genom att ange en matris med en eller flera pipelinesteg under konfigurationen. Operatorer som stöds är följande.

  • $addFields
  • $match
  • $project
  • $set
  • $unset

Begränsningar

  • Ändringsströmhändelser i kluster med flera fragment stöds ännu inte.
  • Markörer för ändringsström måste återställas efter en felövergångshändelse i nuvarande tillstånd.
  • Update händelsen har ännu inte stöd för uppdateringsbeskrivning.
  • pre-image är ett alternativ som inte stöds.
  • $changestream som en kapslad pipeline i en annan fas stöds ännu inte.