TTL für Sammlungen festlegen

Sobald Daten in eine Sammlung eingefügt werden, bleiben sie dort standardmäßig. In manchen Szenarien möchten Sie jedoch Daten nach einer bestimmten Zeit entfernen oder bereinigen. In solchen Fällen können Sie die Eigenschaft Time-to-Live (TTL) der Sammlung so konfigurieren, dass Milvus die Daten automatisch löscht, sobald die TTL abgelaufen ist.

Übersicht

Time-to-Live (TTL) wird in Datenbanken häufig für Szenarien verwendet, in denen Daten nur für einen bestimmten Zeitraum nach dem Einfügen oder Ändern gültig oder zugänglich bleiben sollen. Danach können die Daten automatisch entfernt werden.

Wenn Sie beispielsweise täglich Daten einspeisen, die Datensätze aber nur 14 Tage lang aufbewahren müssen, können Sie Milvus so konfigurieren, dass alle Daten, die älter sind als dieser Zeitraum, automatisch entfernt werden, indem Sie die TTL der Sammlung auf 14 × 24 × 3600 = 1209600 Sekunden einstellen. Dadurch wird sichergestellt, dass nur die Daten der letzten 14 Tage in der Sammlung verbleiben.

Abgelaufene Entitäten erscheinen nicht in den Such- oder Abfrageergebnissen. Sie können jedoch bis zur nächsten Datenverdichtung im Speicher verbleiben, die innerhalb der nächsten 24 Stunden durchgeführt werden sollte.

Sie können steuern, wann die Datenverdichtung ausgelöst werden soll, indem Sie in Ihrer Milvus-Konfigurationsdatei den Konfigurationspunkt dataCoord.compaction.expiry.tolerance setzen.

Der Standardwert für dieses Konfigurationselement ist -1, was bedeutet, dass das bestehende Datenverdichtungsintervall gilt. Wenn Sie den Wert jedoch auf eine positive ganze Zahl wie 12 ändern, wird die Datenverdichtung die angegebene Anzahl von Stunden nach Ablauf der Entitäten ausgelöst.

Die TTL-Eigenschaft in einer Milvus-Sammlung wird als ganze Zahl in Sekunden angegeben. Einmal festgelegt, werden alle Daten, die ihre TTL überschreiten, automatisch aus der Sammlung gelöscht.

Da der Löschvorgang asynchron abläuft, werden die Daten möglicherweise nicht genau dann aus den Suchergebnissen entfernt, wenn die angegebene TTL verstrichen ist. Stattdessen kann es zu einer Verzögerung kommen, da die Entfernung von der Garbage Collection (GC) und den Verdichtungsprozessen abhängt, die in nicht-deterministischen Intervallen stattfinden.

TTL setzen

Sie können die TTL-Eigenschaft festlegen, wenn Sie

TTL bei der Erstellung einer Sammlung festlegen

Das folgende Codeschnipsel zeigt, wie die TTL-Eigenschaft beim Erstellen einer Sammlung festgelegt wird.

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

TTL für eine bestehende Sammlung festlegen

Der folgende Codeschnipsel demonstriert, wie die TTL-Eigenschaft in einer bestehenden Sammlung geändert werden kann.

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

TTL-Einstellung verwerfen

Wenn Sie beschließen, die Daten in einer Sammlung auf unbestimmte Zeit aufzubewahren, können Sie die TTL-Einstellung für diese Sammlung einfach löschen.

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

War diese Seite hilfreich?