Настройка срока жизни в Azure Cosmos DB
ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL
В Azure Cosmos DB вы можете настроить срок жизни (TTL) на уровне контейнера или переопределить его на уровне элемента, когда он будет настроен для контейнера. Срок жизни для контейнера можно настроить с помощью портала Azure или пакетов SDK для конкретных языков. Переопределение срока жизни на уровне элемента можно настроить с использованием пакетов SDK.
Содержимое этой статьи имеет отношение к сроку жизни в транзакционном хранилище Azure Cosmos DB. Если вас интересует срок жизни в аналитическом хранилище для активации сценариев NoETL HTAP с использованием Azure Synapse Link, щелкните здесь.
Включение срока жизни для контейнера с помощью портала Azure
Следуйте инструкциям ниже, чтобы включить в контейнере неограниченный срок жизни. Включение срока жизни на уровне контейнера, чтобы одно и то же значение могло переопределяться на уровне отдельного элемента. Вы также можете задать значение срока жизни, введя ненулевое значение, обозначающее период в секундах.
Войдите на портал Azure.
Создайте новую учетную запись Azure Cosmos DB или выберите существующую учетную запись.
Откройте область Data Explorer.
Выберите существующий контейнер, на вкладке Настройки разверните его и измените следующие значения:
В разделе Параметры найдите Срок жизни.
В зависимости от своих требований можно:
- отключить этот параметр;
- установите для него значение Включен (по умолчанию) или
- включить его с заданным в секундах значением срока жизни.
Выберите Сохранить, чтобы сохранить изменения.
- Если параметр DefaultTimeToLive имеет значение null, значит, параметр срока жизни отключен.
- Если параметр DefaultTimeToLive имеет значение –1, значит, параметр срока жизни включен (без значения по умолчанию).
- Если параметр DefaultTimeToLive имеет любое другое целочисленное значение (кроме 0), значит, параметр срока жизни включен. Сервер будет автоматически удалять элементы на основе настроенного значения.
Включение срока жизни для контейнера с помощью Azure CLI или Azure PowerShell
Сведения о создании или включении срока жизни для контейнера см. в следующих статьях:
- Создание контейнера с ограниченным сроком жизни с помощью Azure CLI
- Создание контейнера с ограниченным сроком жизни с помощью 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 отключено на уровне контейнера, поле срока жизни в элементе будет игнорироваться, пока свойство не будет включено для этого контейнера.
Следуйте инструкциям ниже, чтобы включить в элементе срок жизни.
Войдите на портал Azure.
Создайте новую учетную запись Azure Cosmos DB или выберите существующую учетную запись.
Откройте область Data Explorer.
Выберите существующий контейнер, разверните его и измените следующие значения:
- Откройте окно Scale & Settings (Параметры масштабирования).
- В разделе Параметры найдите Срок жизни.
- Выберите Включен (по умолчанию) или Включен и задайте значение срока жизни.
- Выберите Сохранить, чтобы сохранить изменения.
Затем перейдите к элементу, для которого нужно установить срок жизни, добавьте свойство
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);
Следующие шаги
Дополнительные сведения о сроке жизни см. в следующей статье: