Compartilhar via


Configurar a vida útil no Azure Cosmos DB

No Azure Cosmos DB, você pode optar por configurar o TTL (tempo de vida útil) no nível do contêiner ou substituí-lo em um nível de item depois de definir 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 no nível do item podem ser configuradas usando os SDKs.

Habilitar o 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. Entre no portal do Azure.

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

  3. Abra o painel Data Explorer.

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

    1. Em Configurações, localize Tempo de Vida.
    2. Com base no requisito, você pode:
    • Desative essa configuração.
    • Defina-o como Ativado (sem padrão).
    • Ligue com um valor TTL especificado em segundos.
    1. Selecione Salvar para salvar as alterações.

    Captura de tela das configurações para configurar o Tempo de vida no portal do Azure.

  • Quando DefaultTimeToLive for nulo, o TTL estará Desativado.
  • Quando DefaultTimeToLive é -1, sua configuração de TTL estará Ativada (não padrão).
  • Quando DefaultTimeToLive tiver qualquer outro valor inteiro (exceto 0), a configuração de TTL será Ativada. O servidor exclui automaticamente 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 o 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 de TTL configurado, todos os itens no contêiner após a última modificação do carimbo de hora do item _ts serã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 de 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 último carimbo de data/hora modificado 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, por padrão, o TTL definido para o contêiner se aplicará 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 habilitado novamente no contêiner.

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

  1. Entre no portal do Azure.

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

  3. Abra o painel Data Explorer.

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

    • Abra a janela Escala e Configurações.
    • Em Configuração, localize Time to Live (TTL).
    • Selecione Ativado (não há padrão) ou selecione Ativado e defina um valor de vida útil.
    • Selecione Salvar para salvar as alterações.
  5. Navegue até o item para o qual você deseja definir o tempo de vida útil, 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 como a hora atual, e a TTL até que o item expire ser iniciada novamente. Se você quiser alterar a TTL de um item, poderá atualizar o campo exatamente como atualizaria 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 a 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, 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 eles 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);