Установка TTL коллекции
Когда данные помещаются в коллекцию, они остаются там по умолчанию. Однако в некоторых сценариях вы можете захотеть удалить или очистить данные через определенный период времени. В таких случаях вы можете настроить свойство коллекции Time-to-Live (TTL), чтобы Milvus автоматически удалял данные по истечении TTL.
Обзор
Свойство Time-to-Live (TTL) обычно используется в базах данных для сценариев, в которых данные должны оставаться действительными или доступными только в течение определенного периода времени после любой вставки или модификации. Затем данные могут быть автоматически удалены.
Например, если данные поступают ежедневно, но хранить записи нужно только 14 дней, можно настроить Milvus на автоматическое удаление всех данных старше этого срока, установив TTL коллекции на 14 × 24 × 3600 = 1209600 секунд. Это гарантирует, что в коллекции останутся только самые последние данные за 14 дней.
Сущности с истекшим сроком хранения не будут отображаться в результатах поиска или запросов. Однако они могут оставаться в хранилище до последующего уплотнения данных, которое должно быть выполнено в течение следующих 24 часов.
Вы можете контролировать время запуска уплотнения данных, установив конфигурационный элемент dataCoord.compaction.expiry.tolerance в конфигурационном файле Milvus.
По умолчанию этот элемент конфигурации имеет значение -1, указывающее на то, что применяется существующий интервал уплотнения данных. Однако если вы измените его значение на целое положительное число, например 12, уплотнение данных будет запускаться через указанное количество часов после истечения срока действия любых сущностей.
Свойство TTL в коллекции Milvus задается как целое число в секундах. После установки этого свойства все данные, которые превысили TTL, будут автоматически удалены из коллекции.
Поскольку процесс удаления асинхронный, данные могут быть удалены из результатов поиска не сразу после истечения указанного TTL. Вместо этого может возникнуть задержка, поскольку удаление зависит от процессов сборки мусора (GC) и уплотнения, которые происходят через недетерминированные промежутки времени.
Установить TTL
Свойство TTL можно установить, когда вы
Установка TTL при создании коллекции
Следующий фрагмент кода демонстрирует, как установить свойство TTL при создании коллекции.
from pymilvus import MilvusClient
# With TTL
client.create_collection(
collection_name="my_collection",
schema=schema,
properties={
"collection.ttl.seconds": 1209600
}
)
import io.milvus.v2.service.collection.request.CreateCollectionReq;
import io.milvus.v2.service.collection.request.AlterCollectionReq;
import io.milvus.param.Constant;
import java.util.HashMap;
import java.util.Map;
// With TTL
CreateCollectionReq customizedSetupReq = CreateCollectionReq.builder()
.collectionName("my_collection")
.collectionSchema(schema)
.property(Constant.TTL_SECONDS, "1209600")
.build();
client.createCollection(customizedSetupReq);
const createCollectionReq = {
collection_name: "my_collection",
schema: schema,
properties: {
"collection.ttl.seconds": 1209600
}
}
err = client.CreateCollection(ctx, milvusclient.NewCreateCollectionOption("my_collection", schema).
WithProperty(common.CollectionTTLConfigKey, 1209600)) // TTL in seconds
if err != nil {
fmt.Println(err.Error())
// handle error
}
export params='{
"ttlSeconds": 1209600
}'
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d "{
\"collectionName\": \"my_collection\",
\"schema\": $schema,
\"params\": $params
}"
Установка TTL для существующей коллекции
Следующий фрагмент кода демонстрирует, как изменить свойство TTL в существующей коллекции.
client.alter_collection_properties(
collection_name="my_collection",
properties={"collection.ttl.seconds": 1209600}
)
Map<String, String> properties = new HashMap<>();
properties.put("collection.ttl.seconds", "1209600");
AlterCollectionReq alterCollectionReq = AlterCollectionReq.builder()
.collectionName("my_collection")
.properties(properties)
.build();
client.alterCollection(alterCollectionReq);
res = await client.alterCollection({
collection_name: "my_collection",
properties: {
"collection.ttl.seconds": 1209600
}
})
err = client.AlterCollectionProperties(ctx, milvusclient.NewAlterCollectionPropertiesOption("my_collection").
WithProperty(common.CollectionTTLConfigKey, 60))
if err != nil {
fmt.Println(err.Error())
// handle error
}
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/alter_properties" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d "{
\"collectionName\": \"my_collection\",
\"properties\": {
\"collection.ttl.seconds\": 1209600
}
}"
Отмена настройки TTL
Если вы решили хранить данные в коллекции неограниченное время, вы можете просто сбросить параметр TTL из этой коллекции.
client.drop_collection_properties(
collection_name="my_collection",
property_keys=["collection.ttl.seconds"]
)
propertyKeys = new String[1]
propertyKeys[0] = "collection.ttl.second"
DropCollectionReq dropCollectionReq = DropCollectionReq.builder()
.collectionName("my_collection")
.propertyKeys(propertyKeys)
.build();
client.dropCollection(dropCollectionReq);
res = await client.dropCollectionProperties({
collection_name: "my_collection",
properties: ["collection.ttl.seconds"]
})
err = client.DropCollectionProperties(ctx, milvusclient.NewDropCollectionPropertiesOption("my_collection", common.CollectionTTLConfigKey))
if err != nil {
fmt.Println(err.Error())
// handle error
}
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/collections/alter_properties" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d "{
\"collectionName\": \""my_collection"\",
\"properties\": {
\"collection.ttl.seconds\": 60
}
}"