تعيين TTL للمجموعة

بمجرد إدراج البيانات في مجموعة، تظل هناك بشكل افتراضي. ومع ذلك، في بعض السيناريوهات، قد ترغب في إزالة البيانات أو تنظيفها بعد فترة معينة. في مثل هذه الحالات، يمكنك تكوين خاصية وقت الصلاحية للمجموعة (TTL) بحيث يقوم Milvus تلقائيًا بحذف البيانات بمجرد انتهاء وقت الصلاحية.

نظرة عامة

يتم استخدام Time-to-Live (TTL) بشكل شائع في قواعد البيانات للسيناريوهات التي يجب أن تظل فيها البيانات صالحة أو يمكن الوصول إليها لفترة معينة فقط بعد أي إدراج أو تعديل. بعد ذلك، يمكن إزالة البيانات تلقائيًا.

على سبيل المثال، إذا كنت تقوم بإدخال البيانات يوميًا ولكنك تحتاج فقط إلى الاحتفاظ بالسجلات لمدة 14 يومًا، يمكنك تكوين Milvus لإزالة أي بيانات أقدم من ذلك تلقائيًا عن طريق تعيين TTL TTL للمجموعة إلى 14 × 24 × 3600 = 1209600 ثانية. وهذا يضمن بقاء بيانات ال 14 يومًا الأخيرة فقط في المجموعة.

يتم تحديد خاصية TTL TTL في مجموعة Milvus كعدد صحيح بالثواني. وبمجرد تعيينها، سيتم حذف أي بيانات تتجاوز مدة صلاحيتها المؤقتة تلقائيًا من المجموعة.

نظرًا لأن عملية الحذف غير متزامنة، قد لا تتم إزالة البيانات من نتائج البحث بالضبط بمجرد انقضاء فترة الاختبار المحددة. وبدلاً من ذلك، قد يكون هناك تأخير، حيث تعتمد عملية الحذف على عمليتي تجميع البيانات المهملة (GC) والضغط، اللتين تحدثان على فترات غير محددة.

تعيين TTL

يمكنك تعيين خاصية TTL عندما تقوم بما يلي

تعيين TTL TTL عند إنشاء مجموعة

يوضح مقتطف الشيفرة التالي كيفية تعيين خاصية TTL عند إنشاء مجموعة.

from pymilvus import MilvusClient

# With TTL
client.create_collection(
collection_name="my_collection",
schema=schema,
# highlight-start
properties={
"collection.ttl.seconds": 1209600
}
# highlight-end
)
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)
        // highlight-next-line
        .property(Constant.TTL_SECONDS, "1209600")
        .build();
client.createCollection(customizedSetupReq);
const createCollectionReq = {
    collection_name: "my_collection",
    schema: schema,
    // highlight-start
    properties: {
        "collection.ttl.seconds": 1209600
    }
    // highlight-end
}
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 لمجموعة موجودة

يوضح مقتطف الشيفرة التالي كيفية تغيير خاصية 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
    }
}"

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟