Dela via


Konfigurera tidsgräns i Azure Cosmos DB

GÄLLER FÖR: NoSQL

I Azure Cosmos DB kan du välja att konfigurera time to live (TTL) på containernivå, eller så kan du åsidosätta det på objektnivå när du har angett TTL för containern. Du kan konfigurera TTL för en container med hjälp av Azure-portalen eller språkspecifika SDK:er. TTL-åsidosättningar på objektnivå kan konfigureras med hjälp av SDK:erna.

Tips/Råd

Den här artikelns innehåll är relaterat till TTL för Azure Cosmos DB-transaktionslager. Om du letar efter TTL för analyslagring, som möjliggör NoETL HTAP-scenarier via Azure Synapse Link, se Analytisk Time-to-Live.

Aktivera TTL i en container med hjälp av Azure-portalen

Använd följande steg för att aktivera TTL på en container utan förfallodatum. Om du aktiverar TTL på containernivå kan samma värde åsidosättas på en enskild objektnivå. Du kan också ange TTL genom att ange ett värde som inte är noll i sekunder.

  1. Logga in på Azure-portalen.

  2. Skapa ett nytt Azure Cosmos DB-konto eller välj ett befintligt konto.

  3. Öppna fönstret Datautforskaren.

  4. Välj en befintlig container, expandera fliken Inställningar och ändra följande värden:

    1. Gå till Inställningar och leta upp Time to Live.
    2. Baserat på dina behov kan du:
    • Inaktivera den här inställningen.
    • Ställ in den på På (inget standardvärde).
    • Aktivera med ett TTL-värde som anges i sekunder.
    1. Välj Spara för att spara ändringarna.

    Skärmbild av inställningarna för att konfigurera Time to live i Azure-portalen.

  • När DefaultTimeToLive är null är TTL av.
  • När DefaultTimeToLive är -1 är TTL-inställningen (inget standardvärde).
  • När DefaultTimeToLive har något annat heltalsvärde (förutom 0) är TTL-inställningen . Servern tar automatiskt bort objekt baserat på det konfigurerade värdet.

Aktivera TTL på en container med hjälp av Azure CLI eller Azure PowerShell

Information om hur du skapar eller aktiverar TTL för en container finns i:

Aktivera TTL på en container med hjälp av ett SDK

Database database = client.GetDatabase("database");

ContainerProperties properties = new ()
{
    Id = "container",
    PartitionKeyPath = "/customerId",
    // Never expire by default
    DefaultTimeToLive = -1
};

// Create a new container with TTL enabled and without any expiration value
Container container = await database
    .CreateContainerAsync(properties);

Ange TTL för en container med hjälp av ett SDK

Om du vill ange TTL för en container måste du ange ett icke-nollposalt tal som anger tidsperioden i sekunder. Baserat på det konfigurerade TTL-värde tas alla objekt i containern efter den senast ändrade tidsstämpeln för objektet _ts bort.

Database database = client.GetDatabase("database");

ContainerProperties properties = new ()
{
    Id = "container",
    PartitionKeyPath = "/customerId",
    // Expire all documents after 90 days
    DefaultTimeToLive = 90 * 60 * 60 * 24
};

// Create a new container with TTL enabled and without any expiration value
Container container = await database
    .CreateContainerAsync(properties);

Ange TTL för ett objekt med hjälp av Azure-portalen

Förutom att ange en standard-TTL för en container kan du ange en TTL för ett objekt. Om du anger TTL på objektnivå åsidosätts standard-TTL för objektet i containern.

  • Om du vill ange TTL för ett objekt måste du ange ett positivt tal som är större än noll som anger perioden i sekunder som objektet ska gå ut efter den senaste ändrade tidsstämpeln för objektet _ts. Du kan även ange ett -1 när objektet inte ska upphöra att gälla.

  • Om objektet inte har något TTL-fält gäller TTL-värdet som standard för containern för objektet.

  • Om TTL är inaktiverat på containernivå ignoreras TTL-fältet på objektet tills TTL återaktiveras på containern.

Använd följande steg för att aktivera TTL för ett objekt:

  1. Logga in på Azure-portalen.

  2. Skapa ett nytt Azure Cosmos DB-konto eller välj ett befintligt konto.

  3. Öppna fönstret Datautforskaren.

  4. Välj en befintlig container, expandera den och ändra följande värden:

    • Öppna fönstret Scale & Settings (Skalning och inställningar).
    • Under Inställning letar du reda på Tid att leva.
    • Välj På (inget standardvärde) eller välj och ange ett TTL-värde.
    • Välj Spara för att spara ändringarna.
  5. Navigera till det objekt som du vill ange tid för att leva för, lägg till ttl egenskapen och välj Uppdatera.

    {
        "id": "1",
        "_rid": "Jic9ANWdO-EFAAAAAAAAAA==",
        "_self": "dbs/Jic9AA==/colls/Jic9ANWdO-E=/docs/Jic9ANWdO-EFAAAAAAAAAA==/",
        "_etag": "\"0d00b23f-0000-0000-0000-5c7712e80000\"",
        "_attachments": "attachments/",
        "ttl": 10,
        "_ts": 1551307496
    }
    

Ange TTL för ett objekt med hjälp av ett SDK

public record SalesOrder(string id, string customerId, int ttl);
Container container = database.GetContainer("container");

SalesOrder item = new (
    "SO05", 
    "CO18009186470"
    // Expire sales order in 30 days using "ttl" property
    ttl:  60 * 60 * 24 * 30
);

await container.CreateItemAsync<SalesOrder>(item);

Återställa TTL med hjälp av en SDK

Du kan återställa TTL för ett objekt genom att utföra en skriv- eller uppdateringsåtgärd på objektet. Skriv- eller uppdateringsåtgärden _ts anger den aktuella tiden och TTL för objektet som ska upphöra att gälla börjar igen. Om du vill ändra TTL-värdet för ett objekt kan du uppdatera fältet precis som du uppdaterar andra fält.

SalesOrder item = await container.ReadItemAsync<SalesOrder>(
    "SO05", 
    new PartitionKey("CO18009186470")
);

// Update ttl to 2 hours
SalesOrder modifiedItem = item with { 
    ttl = 60 * 60 * 2 
};

await container.ReplaceItemAsync<SalesOrder>(
    modifiedItem,
    "SO05", 
    new PartitionKey("CO18009186470")    
);

Inaktivera TTL med hjälp av ett SDK

Om du vill inaktivera TTL på en container och stoppa bakgrundsprocessen från att söka efter objekt DefaultTimeToLive som har upphört att gälla, bör egenskapen på containern tas bort. Att ta bort den här egenskapen skiljer sig från att ange den till -1. När du anger till -1 kommer nya objekt som lagts till i containern att finnas för evigt, men du kan åsidosätta det här värdet för specifika objekt i containern. När du tar bort TTL-egenskapen från containern upphör objekten aldrig att gälla, även om de uttryckligen åsidosätter det tidigare TTL-standardvärdet.

ContainerProperties properties = await container.ReadContainerAsync();

// Disable ttl at container-level
properties.DefaultTimeToLive = null;

await container.ReplaceContainerAsync(properties);