Definir TTL da coleção
Quando os dados são inseridos numa coleção, permanecem lá por defeito. No entanto, em alguns cenários, pode querer remover ou limpar os dados após um determinado período. Nesses casos, pode configurar a propriedade Time-to-Live (TTL) da coleção para que o Milvus elimine automaticamente os dados quando o TTL expirar.
Visão geral
O Time-to-Live (TTL) é normalmente utilizado em bases de dados para cenários em que os dados só devem permanecer válidos ou acessíveis durante um determinado período após qualquer inserção ou modificação. Em seguida, os dados podem ser removidos automaticamente.
Por exemplo, se ingerir dados diariamente mas só precisar de manter registos durante 14 dias, pode configurar o Milvus para remover automaticamente quaisquer dados mais antigos do que isso, definindo o TTL da coleção para 14 × 24 × 3600 = 1209600 segundos. Isto garante que apenas os dados mais recentes de 14 dias permaneçam na coleção.
As entidades expiradas não aparecerão em nenhum resultado de pesquisa ou consulta. No entanto, elas podem permanecer no armazenamento até a compactação de dados subsequente, que deve ser realizada nas próximas 24 horas.
É possível controlar o momento em que a compactação de dados é activada definindo o item de configuração dataCoord.compaction.expiry.tolerance no ficheiro de configuração do Milvus.
Por defeito, este item de configuração é -1, indicando que se aplica o intervalo de compactação de dados existente. No entanto, ao alterar o seu valor para um número inteiro positivo, como 12, a compactação de dados será acionada o número de horas especificado após a expiração de quaisquer entidades.
A propriedade TTL numa coleção Milvus é especificada como um número inteiro em segundos. Uma vez definida, qualquer dado que ultrapasse o seu TTL será automaticamente eliminado da coleção.
Como o processo de eliminação é assíncrono, os dados podem não ser removidos dos resultados da pesquisa exatamente quando o TTL especificado tiver expirado. Em vez disso, pode haver um atraso, uma vez que a remoção depende dos processos de recolha de lixo (GC) e de compactação, que ocorrem em intervalos não determinísticos.
Definir TTL
É possível definir a propriedade TTL ao
Definir TTL ao criar uma coleção
O seguinte trecho de código demonstra como definir a propriedade TTL quando você cria uma coleção.
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
}"
Definir TTL para uma coleção existente
O seguinte trecho de código demonstra como alterar a propriedade TTL em uma coleção existente.
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
}
}"
Eliminar a configuração TTL
Se você decidir manter os dados em uma coleção indefinidamente, você pode simplesmente remover a configuração TTL dessa coleção.
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
}
}"