Partilhar via


Configurar o Tempo de Vida no Azure Cosmos DB

No Azure Cosmos DB, você pode optar por configurar o tempo de vida (TTL) no nível do contêiner ou pode substituí-lo em um nível de item depois de definir o TTL para o contêiner. Você pode configurar o TTL para um contêiner usando o portal do Azure ou os SDKs específicos do idioma. As substituições de TTL a nível de item podem ser configuradas utilizando os SDKs.

Habilitar TTL em um contêiner usando o portal do Azure

Use as etapas a seguir para habilitar o TTL em um contêiner sem expiração. Habilitar o TTL no nível do contêiner permite que o mesmo valor seja substituído no nível de um item individual. Você também pode definir o TTL inserindo um valor diferente de zero por segundos.

  1. Inicie sessão no portal Azure.

  2. Crie uma nova conta do Azure Cosmos DB ou selecione uma conta existente.

  3. Abra o painel Explorador de Dados.

  4. Selecione um contêiner existente, expanda a guia Configurações e modifique os seguintes valores:

    1. Em Definições, localize Tempo de Viver.
    2. Com base na sua exigência, você pode:
    • Desative essa configuração.
    • Defina-o como Ativado (sem padrão).
    • Ative com um valor TTL especificado em segundos.
    1. Selecione Guardar para guardar as alterações.

    Captura de ecrã das definições para configurar o Tempo de vida no portal do Azure.

  • Quando DefaultTimeToLive é null, então seu TTL é Off.
  • Quando DefaultTimeToLive é -1 , sua configuração TTL está On (Sem padrão).
  • Quando DefaultTimeToLive tem qualquer outro valor inteiro (exceto 0), sua configuração TTL é On. O servidor exclui automaticamente os itens com base no valor configurado.

Habilitar TTL em um contêiner usando a CLI do Azure ou o Azure PowerShell

Para criar ou habilitar o TTL em um contêiner, consulte:

Habilitar TTL em um contêiner usando um 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);

Definir TTL em um contêiner usando um SDK

Para definir o TTL em um contêiner, você precisa fornecer um número positivo diferente de zero que indique o período de tempo em segundos. Com base no valor TTL configurado, todos os itens no contêiner após o carimbo de data/hora da última modificação do item _ts são excluídos.

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);

Definir TTL em um item usando o portal do Azure

Além de definir um TTL padrão em um contêiner, você pode definir um TTL para um item. A configuração do TTL no nível do item substitui o TTL padrão do item nesse contêiner.

  • Para definir o TTL em um item, você precisa fornecer um número positivo diferente de zero, que indica o período, em segundos, para expirar o item após o carimbo de data/hora da última modificação do item _ts. Você também pode fornecer um -1 quando o item não deve expirar.

  • Se o item não tiver um campo TTL, então, por padrão, o TTL definido para o contêiner se aplica ao item.

  • Se o TTL estiver desabilitado no nível do contêiner, o campo TTL no item será ignorado até que o TTL seja reativado no contêiner.

Use as seguintes etapas para habilitar o TTL em um item:

  1. Inicie sessão no portal Azure.

  2. Crie uma nova conta do Azure Cosmos DB ou selecione uma conta existente.

  3. Abra o painel Explorador de Dados.

  4. Selecione um contêiner existente, expanda-o e modifique os seguintes valores:

    • Abra a janela Scale & Settings .
    • Em Configuração, localize Tempo de Viver.
    • Selecione Ativado (sem padrão) ou selecione Ativado e defina um valor TTL.
    • Selecione Guardar para guardar as alterações.
  5. Navegue até o item para o qual você deseja definir o tempo de vida, adicione a ttl propriedade e selecione Atualizar.

    {
        "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
    }
    

Definir TTL em um item usando um 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);

Redefinir TTL usando um SDK

Você pode redefinir o TTL em um item executando uma operação de gravação ou atualização no item. A operação de gravação ou atualização define o _ts para o tempo atual, e o TTL para o item expirar reinicia. Se desejar alterar o TTL de um item, pode atualizar o campo tal como atualiza qualquer outro campo.

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")    
);

Desabilitar o TTL usando um SDK

Para desabilitar o TTL em um contêiner e impedir que o processo em segundo plano verifique se há itens expirados, a DefaultTimeToLive propriedade no contêiner deve ser excluída. Excluir essa propriedade é diferente de defini-la como -1. Quando você o define como -1, os novos itens adicionados ao contêiner vivem para sempre, no entanto, você pode substituir esse valor em itens específicos no contêiner. Quando você remove a propriedade TTL do contêiner, os itens nunca expiram, mesmo que substituam explicitamente o valor TTL padrão anterior.

ContainerProperties properties = await container.ReadContainerAsync();

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

await container.ReplaceContainerAsync(properties);