Establecer TTL de la colección

Una vez que los datos se insertan en una colección, permanecen allí por defecto. Sin embargo, en algunos escenarios, es posible que desee eliminar o limpiar los datos después de un cierto período. En tales casos, puede configurar la propiedad Tiempo de vida (TTL) de la colección para que Milvus elimine automáticamente los datos una vez que expire el TTL.

Resumen

Time-to-Live (TTL) se utiliza comúnmente en bases de datos para escenarios donde los datos sólo deben permanecer válidos o accesibles durante un cierto período después de cualquier inserción o modificación. Después, los datos pueden eliminarse automáticamente.

Por ejemplo, si ingiere datos diariamente pero sólo necesita retener registros durante 14 días, puede configurar Milvus para que elimine automáticamente cualquier dato anterior a ese periodo estableciendo el TTL de la colección en 14 × 24 × 3600 = 1209600 segundos. Esto garantiza que sólo permanezcan en la colección los datos de los 14 días más recientes.

Las entidades caducadas no aparecerán en ningún resultado de búsqueda o consulta. Sin embargo, pueden permanecer en el almacenamiento hasta la posterior compactación de datos, que debe realizarse en las próximas 24 horas.

Puede controlar cuándo se activa la compactación de datos estableciendo el elemento de configuración dataCoord.compaction.expiry.tolerance en su archivo de configuración de Milvus.

Este elemento de configuración tiene por defecto el valor -1, lo que indica que se aplica el intervalo de compactación de datos existente. Sin embargo, cuando cambie su valor a un número entero positivo, como 12, la compactación de datos se activará el número de horas especificado después de que caduquen las entidades.

La propiedad TTL en una colección Milvus se especifica como un entero en segundos. Una vez establecida, cualquier dato que supere su TTL se borrará automáticamente de la colección.

Debido a que el proceso de eliminación es asíncrono, los datos pueden no ser eliminados de los resultados de búsqueda exactamente una vez que el TTL especificado ha transcurrido. En su lugar, puede haber un retraso, ya que la eliminación depende de la recolección de basura (GC) y los procesos de compactación, que se producen en intervalos no deterministas.

Establecer TTL

Puede establecer la propiedad TTL cuando

Establecer TTL al crear una colección

El siguiente fragmento de código muestra cómo establecer la propiedad TTL al crear una colección.

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

Establecer TTL para una colección existente

El siguiente fragmento de código demuestra cómo modificar la propiedad TTL en una colección 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 TTL

Si decides mantener los datos en una colección indefinidamente, puedes simplemente eliminar la configuración TTL de esa colección.

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

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

¿Fue útil esta página?