Mengatur TTL Koleksi
Setelah data dimasukkan ke dalam koleksi, data akan tetap berada di sana secara default. Namun, dalam beberapa skenario, Anda mungkin ingin menghapus atau membersihkan data setelah periode tertentu. Dalam kasus seperti itu, Anda dapat mengonfigurasi properti Time-to-Live (TTL) koleksi sehingga Milvus secara otomatis menghapus data setelah TTL berakhir.
Gambaran Umum
Time-to-Live (TTL) biasanya digunakan dalam database untuk skenario di mana data hanya boleh tetap valid atau dapat diakses selama periode tertentu setelah penyisipan atau modifikasi. Kemudian, data tersebut dapat dihapus secara otomatis.
Misalnya, jika Anda memasukkan data setiap hari namun hanya perlu menyimpan catatan selama 14 hari, Anda dapat mengonfigurasi Milvus untuk secara otomatis menghapus data yang lebih lama dari itu dengan mengatur TTL koleksi ke 14 × 24 × 3600 = 1209600 detik. Hal ini memastikan bahwa hanya data 14 hari terakhir yang masih ada di dalam koleksi.
Entitas yang kedaluwarsa tidak akan muncul dalam hasil pencarian atau kueri apa pun. Namun, entitas tersebut dapat tetap berada di penyimpanan hingga pemadatan data berikutnya, yang harus dilakukan dalam 24 jam ke depan.
Anda dapat mengontrol kapan waktu pemadatan data dengan mengatur item konfigurasi dataCoord.compaction.expiry.tolerance dalam file konfigurasi Milvus Anda.
Item konfigurasi ini secara default bernilai -1, yang mengindikasikan bahwa interval pemadatan data yang ada berlaku. Namun, ketika Anda mengubah nilainya menjadi bilangan bulat positif, seperti 12, pemadatan data akan dipicu pada jumlah jam yang ditentukan setelah entitas menjadi kadaluarsa.
Properti TTL dalam koleksi Milvus ditetapkan sebagai bilangan bulat dalam hitungan detik. Setelah ditetapkan, setiap data yang melampaui TTL akan secara otomatis dihapus dari koleksi.
Karena proses penghapusan bersifat asinkron, data mungkin tidak akan dihapus dari hasil pencarian tepat setelah TTL yang ditentukan berlalu. Sebaliknya, mungkin ada penundaan, karena penghapusan tergantung pada pengumpulan sampah (GC) dan proses pemadatan, yang terjadi pada interval non-deterministik.
Mengatur TTL
Anda dapat mengatur properti TTL saat Anda
Mengatur TTL saat membuat koleksi
Cuplikan kode berikut ini mendemonstrasikan cara menyetel properti TTL saat Anda membuat koleksi.
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
}"
Mengatur TTL untuk koleksi yang sudah ada
Cuplikan kode berikut ini menunjukkan cara mengubah properti TTL dalam koleksi yang sudah ada.
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
}
}"
Menghilangkan pengaturan TTL
Jika Anda memutuskan untuk menyimpan data dalam koleksi tanpa batas waktu, Anda dapat menghapus pengaturan TTL dari koleksi tersebut.
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
}
}"