Поделиться через


Настройка срока жизни в Azure Cosmos DB

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

В Azure Cosmos DB вы можете настроить срок жизни (TTL) на уровне контейнера или переопределить его на уровне элемента после настройки для контейнера. Срок жизни для контейнера можно настроить с помощью портала Azure или пакетов SDK для конкретных языков. Переопределение срока жизни на уровне элемента можно настроить с использованием пакетов SDK.

Содержимое этой статьи имеет отношение к сроку жизни записи в транзакционном хранилище Azure Cosmos DB. Если вы ищете функцию TTL для аналитического хранилища, позволяющую сценарии NoETL HTAP с использованием Azure Synapse Link, нажмите здесь.

Включение срока жизни для контейнера с помощью портала Azure

Следуйте нижеуказанным шагам, чтобы включить для контейнера время жизни без истечения срока. Включение TTL на уровне контейнера, чтобы можно было переопределить то же значение на уровне отдельного элемента. Вы также можете установить TTL, введя ненулевое значение в секундах.

  1. Войдите на портал Azure.

  2. Создайте новую учетную запись Azure Cosmos DB или выберите существующую учетную запись.

  3. Откройте область Data Explorer.

  4. Выберите существующий контейнер, на вкладке Настройки разверните его и измените следующие значения:

    • В разделе Параметры найдите Срок жизни.

    • В зависимости от своих требований можно:

      • отключить этот параметр;
      • установите для него значение Включен (без значения по умолчанию) или
      • Включить с указанным значением TTL в секундах.
    • Выберите Сохранить, чтобы сохранить изменения.

    Настройка срока жизни на портале Azure

  • Если параметр DefaultTimeToLive имеет значение null, значит, параметр срока жизни отключен.
  • Если параметр DefaultTimeToLive имеет значение –1, значит, параметр срока жизни включен (без значения по умолчанию).
  • Если параметр DefaultTimeToLive имеет любое другое целочисленное значение (кроме 0), значит, параметр срока жизни включен. Сервер будет автоматически удалять элементы на основе настроенного значения.

Включение срока жизни для контейнера с помощью Azure CLI или Azure PowerShell

Сведения о создании или включении срока жизни для контейнера см. в следующих статьях:

Включение срока жизни для контейнера с помощью пакета 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);

Настройка срока жизни для контейнера с помощью пакета SDK

Чтобы задать срок жизни в контейнере, необходимо ввести ненулевое положительное число, указывающее период времени в секундах. Исходя из настроенного значения срока жизни, все элементы в контейнере после последнего изменения метки времени элемента _ts удаляются.

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

Настройка срока жизни элемента с помощью портала

Помимо установки времени жизни по умолчанию для контейнера, вы можете установить время жизни для элемента. Настройка срока жизни на уровне элемента переопределит значение срока жизни по умолчанию для элемента в этом контейнере.

  • Чтобы задать срок жизни для элемента, необходимо ввести ненулевое положительное число, которое будет означать время в секундах, по истечении которого с момента последнего изменения элемента (метка времени _ts) этот элемент будет считаться устаревшим. Вы также можете предоставить -1, если элемент не должен истекать.

  • Если у элемента нет поля срока жизни, то по умолчанию к элементу будет применяться срок жизни, заданный для контейнера.

  • Если TTL отключено на уровне контейнера, поле TTL в элементе будет игнорироваться до тех пор, пока TTL не будет повторно включено на контейнере.

Чтобы включить время жизни на элементе, выполните следующие действия:

  1. Войдите на портал Azure.

  2. Создайте новую учетную запись Azure Cosmos DB или выберите существующую учетную запись.

  3. Откройте область Data Explorer.

  4. Выберите существующий контейнер, разверните его и измените следующие значения:

    • Откройте окно Scale & Settings (Параметры масштабирования).
    • В разделе Параметры найдите Срок жизни.
    • Выберите Включен (не по умолчанию) или Включен и задайте значение срока жизни.
    • Выберите Сохранить, чтобы сохранить изменения.
  5. Затем перейдите к элементу, для которого нужно установить срок жизни, добавьте свойство ttl и выберите Обновить.

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

Настройка срока жизни элемента с помощью пакета 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);

Сброс срока жизни с помощью пакета SDK

Вы можете сбросить срок жизни элемента, выполнив операцию записи или обновления для этого элемента. Операция записи или обновления установит для _ts текущий момент времени, и отсчет времени до истечения срока жизнеспособности элемента начнется заново. Если вы хотите изменить срок жизни элемента, это поле можно обновить так же, как любое другое.

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

Отключение времени жизни с помощью SDK

Чтобы отключить срок жизни в контейнере и остановить фоновый процесс проверки на наличие просроченных элементов, нужно удалить свойство DefaultTimeToLive контейнера. Удаление этого свойства и выбор значения -1 имеют разный эффект. Если задано значение -1, срок действия новых элементов, добавляемых в контейнер, не будет истекать, однако это значение можно переопределить для определенных элементов в контейнере. При удалении свойства TTL из контейнера элементы никогда не истекают, даже если они явно переопределяют предыдущее значение TTL по умолчанию.

ContainerProperties properties = await container.ReadContainerAsync();

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

await container.ReplaceContainerAsync(properties);

Следующие шаги

Дополнительные сведения о сроке жизни см. в следующей статье: