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

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

نظرة عامة

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

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

لن تظهر الكيانات منتهية الصلاحية في أي نتائج بحث أو استعلام. ومع ذلك، قد تبقى في المخزن حتى يتم ضغط البيانات اللاحق، والذي يجب أن يتم في غضون الـ 24 ساعة القادمة.

يمكنك التحكم في وقت تشغيل ضغط البيانات عن طريق تعيين عنصر التكوين dataCoord.compaction.expiry.tolerance في ملف تكوين Milvus الخاص بك.

يتم تعيين عنصر التكوين هذا افتراضيًا إلى -1 ، مما يشير إلى تطبيق الفاصل الزمني الحالي لضغط البيانات. ومع ذلك، عندما تقوم بتغيير قيمته إلى عدد صحيح موجب، مثل 12 ، سيتم تشغيل ضغط البيانات بعدد الساعات المحددة بعد انتهاء صلاحية أي كيانات.

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

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

تعيين TTL

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

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

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

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

تعيين 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 أضعاف.

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

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