コレクションの Truncate
コレクションを Truncate すると、コレクションのスキーマ、制約、インデックスを保持したまま、すべてのエンティティが削除されます。現在のタイムスタンプより前に flush されたすべてのエンティティを検索およびクエリから隠し、バックグラウンドで削除するため、エンティティを削除するよりも効率的です。
この機能はマネージドコレクションにのみ適用されます。
概要
コレクションの Truncate は、スキーマ、制約、インデックスを含む構造定義を完全に保持しながら、コレクションからすべてのエンティティを削除する高性能な操作です。これにより、再設定やインデックスの再構築を行わなくても、コレクションをすぐに新しいデータの取り込みに使用できる状態に保つことができます。
レコードを個別に処理して大量のトランザクションログを生成する従来の削除方法とは異なり、Truncate は最適化された 2 段階のメカニズムで動作します。
-
即時の論理削除
Truncate のタイムスタンプより前に挿入または削除されたすべてのエンティティは即座に flush され、検索およびクエリから隠されるため、以降の操作からは実質的に見えなくなります。
-
効率的な物理クリーンアップ
システムは影響を受けたすべてのデータセグメントをバックグラウンドでガベージコレクションし、エンティティごとの削除処理によるオーバーヘッドを排除します。
Truncate は、テスト環境の更新、パイプラインステージのクリーンアップ、定期的なデータライフサイクル管理など、データセット全体の迅速なリセットが必要で、パフォーマンスとリソース効率が重要なユースケースに最適です。
例
次のコード例では、my_collection という名前のコレクションがすでに存在していることを前提としています。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient, DataType
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)
client.truncate_collection(
collection_name="my_collection"
)
// java
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.collection.request.TruncateCollectionReq;
ConnectConfig connectConfig = ConnectConfig.builder()
.uri("YOUR_CLUSTER_ENDPOINT")
.token("YOUR_CLUSTER_TOKEN")
.build();
MilvusClientV2 client = new MilvusClientV2(connectConfig);
// Truncate collection
TruncateCollectionReq req = TruncateCollectionReq.builder()
.collectionName("my_collection")
.build();
client.truncateCollection(req);
System.out.println("collection truncated successfully");
client.close();
// go
package main
import (
"context"
"fmt"
"log"
"github.com/milvus-io/milvus/client/v3/milvusclient"
)
ctx := context.Background()
client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: "YOUR_CLUSTER_ENDPOINT",
APIKey: "YOUR_CLUSTER_TOKEN",
})
if err != nil {
log.Fatal("failed to connect:", err)
}
defer client.Close(ctx)
err = client.TruncateCollection(ctx, milvusclient.NewTruncateCollectionOption("my_collection"))
if err != nil {
log.Fatal("failed to truncate:", err)
}
fmt.Println("collection truncated successfully")
use milvus::v2::prelude::*;
let client = ClientV2::new(
&ConnectConfig::new()
.uri("YOUR_CLUSTER_ENDPOINT")
.token("YOUR_CLUSTER_TOKEN"),
)
.await?;
client
.truncate_collection(
TruncateCollectionRequest::builder()
.collection_name("my_collection")
.build()?,
)
.await?;
println!("collection truncated successfully");
// C++
#include <iostream>
#include "milvus/MilvusClientV2.h"
auto client = milvus::MilvusClientV2::Create();
auto status = client->Connect(milvus::ConnectParam("YOUR_CLUSTER_ENDPOINT").WithToken("YOUR_CLUSTER_TOKEN"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
status = client->TruncateCollection(milvus::TruncateCollectionRequest().WithCollectionName("my_collection"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
std::cout << "collection truncated successfully" << std::endl;
import { MilvusClient } from "@zilliz/milvus2-sdk-node";
const milvusClient = new MilvusClient({
address: "YOUR_CLUSTER_ENDPOINT",
token: "YOUR_CLUSTER_TOKEN"
});
const res = await milvusClient.truncateCollection({
collection_name: "my_collection"
});
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
# restful
curl -X POST "${CLUSTER_ENDPOINT}/v2/vectordb/collections/truncate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Request-Timeout: 10" \
-d '{
"dbName": "default",
"collectionName": "my_collection"
}'