درج موجودیت‌ها

در این قسمت نحوه درج داده‌ها به Milvus از سمت کلاینت توضیح داده شده است.

همچنین می‌توانید از MilvusDM برای مهاجرت داده به Milvus استفاده کنید. MilvusDM یک ابزار منبع‌باز است که به طور خاص برای وارد کردن و صادر کردن داده با Milvus طراحی شده است.

Milvus 2.1 از نوع داده VARCHAR برای فیلدهای اسکالر پشتیبانی می‌کند. هنگام ساختن یک فهرست برای یک فیلد اسکالر از نوع VARCHAR، نوع فهرست پیش‌فرض یک trie است.

در مثال زیر، 2000 ردیف داده تصادفی به عنوان داده نمونه (مثال CLI Milvus از یک فایل CSV از راه دور از پیش‌ساخته حاوی داده‌های مشابه استفاده می‌کند). برنامه‌های واقعی ممکن است از بُعد بالاتری از بردارها استفاده کنند. شما می‌توانید داده خود را آماده کرده و جایگزین مثال کنید.

آماده‌سازی داده

ابتدا، داده‌های قرار است درج شود را آماده کنید. نوع داده داده‌های قرار است درج شود باید با طرح مجموعه مطابقت داشته باشد، در غیر اینصورت Milvus یک استثناء رخ می‌دهد.

Milvus ارزش‌های پیش‌فرض برای فیلدهای اسکالر، به جز فیلدهای کلید اصلی، را پشتیبانی می‌کند. این به معنای این است که در هنگام درج یا به‌روزرسانی داده، می‌توان برخی از فیلدها را خالی رها کرد. برای کسب اطلاعات بیشتر به ایجاد یک مجموعه مراجعه کنید.

بعد از فعال‌سازی طرح پویا، می‌توانید فیلدهای پویا را به داده‌ها اضافه کنید. برای کسب اطلاعات بیشتر به طرح پویا مراجعه کنید.

bookIDs := make([]int64, 0, 2000)
wordCounts := make([]int64, 0, 2000)
bookIntros := make([][]float32, 0, 2000)
for i := 0; i < 2000; i++ {
	bookIDs = append(bookIDs, int64(i))
	wordCounts = append(wordCounts, int64(i+10000))
	v := make([]float32, 0, 2)
	for j := 0; j < 2; j++ {
		v = append(v, rand.Float32())
	}
	bookIntros = append(bookIntros, v)
}
idColumn := entity.NewColumnInt64("book_id", bookIDs)
wordColumn := entity.NewColumnInt64("word_count", wordCounts)
introColumn := entity.NewColumnFloatVector("book_intro", 2, bookIntros)

درج داده به Milvus

داده را در یک مجموعه درج کنید.

با مشخص کردن partition_name، می‌توانید انتخاب کنید که داده را در کدام بخش درج کنید.

_, err = milvusClient.Insert(
	context.Background(), // ctx
	"book",               // CollectionName
	"",                   // partitionName
	idColumn,             // columnarData
	wordColumn,           // columnarData
	introColumn,          // columnarData
)
if err != nil {
	log.Fatal("failed to insert data:", err.Error())
}
پارامتر توضیحات
ctx زمینه مورد استفاده برای کنترل روند فراخوانی API.
CollectionName نام مجموعه برای درج داده.
partitionName نام بخش برای درج داده در آن. اگر خالی بماند، داده به بخش پیش‌فرض درج خواهد شد.
columnarData داده‌هایی که برای درج در هر فیلد مورد نیاز است.

پس از درج موجودیت‌ها در یک مجموعه که قبلاً فهرست شده است، نیازی به ایجاد مجدد فهرست برای داده‌های جدید درج شده نیست زیرا Milvus به طور خودکار یک فهرست برای داده‌های جدید درج شده ایجاد می‌کند.

تازه‌سازی داده در Milvus

وقتی داده در Milvus درج می‌شود، در بخش‌ها درج می‌شوند. برای پرکردن و فهرست‌سازی بخش‌ها باید به اندازه‌ی خاصی برسند. بخش‌های بسته نشده از طریق جستجوی وحشی پرس‌وجو می‌شوند. برای جلوگیری از این وضعیت، بهتر است flush() را فراخوانی کنید. متد flush() هر بخش باقی‌مانده را مهر و به فهرست می‌فرستد. این بسیار مهم است که این متد را تنها زمانی صدا بزنید که نشست درج پایان یافته است. فراخوانی این متد خیلی اغلب می‌تواند منجر به داده‌های تشکیل‌شده شود، که باید بعداً پاکسازی شود.

محدودیت‌ها

ویژگی حداکثر محدودیت
بُعد بردار ۳۲٬۷۶۸

به‌روزرسانی داده

آماده‌سازی داده‌ها

ابتدا، داده‌ها را برای به‌روزرسانی آماده کنید. نوع داده‌هایی که قرار است به‌روزرسانی شوند باید با ساختار مجموعه‌داده‌ها همخوانی داشته باشد، در غیر این صورت Milvus یک استثناء رخ می‌دهد.

Milvus ارزش‌های پیش‌فرض برای فیلدهای اسکالر را پشتیبانی می‌کند، به استثنای فیلدهای کلید اصلی. این بدان معنی است که در فرآیند درج یا به‌روزرسانی داده، برخی از فیلدها می‌توانند خالی بمانند. برای اطلاعات بیشتر، لطفا به ایجاد مجموعه‌متن مراجعه فرمایید.

nEntities := 3000
dim := 8
idList := make([]int64, 0, nEntities)
randomList := make([]float64, 0, nEntities)
embeddingList := make([][]float32, 0, nEntities)

for i := 0; i < nEntities; i++ {
    idList = append(idList, int64(i))
}

for i := 0; i < nEntities; i++ {
    randomList = append(randomList, rand.Float64())
}

for i := 0; i < nEntities; i++ {
    vec := make([]float32, 0, dim)
    for j := 0; j < dim; j++ {
        vec = append(vec, rand.Float32())
    }
    embeddingList = append(embeddingList, vec)
}
idColData := entity.NewColumnInt64("شناسه", idList)
randomColData := entity.NewColumnDouble("تصادفی", randomList)
embeddingColData := entity.NewColumnFloatVector("تعبیه‌ها", dim, embeddingList)

به‌روزرسانی داده‌ها

داده‌ها را در مجموعه‌ به‌روزرسانی کنید.

if _, err := c.Upsert(ctx, collectionName, "", idColData, embeddingColData);
err != nil {
    log.Fatalf("ناتوان در به‌روزرسانی داده، خطا: %v", err)
}