Définir le TTL de la collection

Une fois que des données sont insérées dans une collection, elles y restent par défaut. Toutefois, dans certains scénarios, vous pouvez souhaiter supprimer ou nettoyer les données après une certaine période. Dans ce cas, vous pouvez configurer la propriété TTL (Time-to-Live) de la collection de sorte que Milvus supprime automatiquement les données à l'expiration du TTL.

Vue d'ensemble

La durée de vie (TTL) est couramment utilisée dans les bases de données pour les scénarios dans lesquels les données ne doivent rester valides ou accessibles que pendant une certaine période après toute insertion ou modification. Ensuite, les données peuvent être automatiquement supprimées.

Par exemple, si vous ingérez des données quotidiennement mais que vous ne devez conserver les enregistrements que pendant 14 jours, vous pouvez configurer Milvus pour qu'il supprime automatiquement toutes les données plus anciennes en définissant le TTL de la collection sur 14 × 24 × 3600 = 1209600 secondes. Cela garantit que seules les données les plus récentes (14 jours) restent dans la collection.

Les entités expirées n'apparaîtront pas dans les résultats des recherches ou des requêtes. Cependant, elles peuvent rester dans le stockage jusqu'au compactage des données suivant, qui devrait être effectué dans les prochaines 24 heures.

Vous pouvez contrôler le moment du déclenchement du compactage des données en définissant l'élément de configuration dataCoord.compaction.expiry.tolerance dans votre fichier de configuration Milvus.

Cet élément de configuration a pour valeur par défaut -1, ce qui indique que l'intervalle de compactage des données existant s'applique. Toutefois, lorsque vous modifiez sa valeur en un nombre entier positif, comme 12, le compactage des données sera déclenché le nombre d'heures spécifié après l'expiration de toute entité.

La propriété TTL d'une collection Milvus est spécifiée sous la forme d'un nombre entier en secondes. Une fois définie, toute donnée qui dépasse son TTL est automatiquement supprimée de la collection.

Le processus de suppression étant asynchrone, il se peut que les données ne soient pas supprimées des résultats de recherche exactement une fois que le TTL spécifié s'est écoulé. Au contraire, il peut y avoir un retard, car la suppression dépend des processus de collecte des déchets (garbage collection, GC) et de compactage, qui se produisent à des intervalles non déterminés.

Définir le TTL

Vous pouvez définir la propriété TTL lorsque vous

Définir le TTL lors de la création d'une collection

L'extrait de code suivant montre comment définir la propriété TTL lors de la création d'une collection.

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" \
--header "Request-Timeout: 10" \
-d "{
    \"collectionName\": \"my_collection\",
    \"schema\": $schema,
    \"params\": $params
}"

Définir le TTL pour une collection existante

L'extrait de code suivant montre comment modifier la propriété TTL dans une collection existante.

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" \
--header "Request-Timeout: 10" \
-d "{
    \"collectionName\": \"my_collection\",
    \"properties\": {
        \"collection.ttl.seconds\": 1209600
    }
}"

Abandonner le paramètre TTL

Si vous décidez de conserver indéfiniment les données d'une collection, vous pouvez simplement supprimer le paramètre TTL de cette collection.

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" \
--header "Request-Timeout: 10" \
-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

Cette page a-t - elle été utile ?