एंटिटी डालना

इस विषय में वर्णित किया गया है कि क्लाइंट साइड से Milvus में डेटा कैसे डाला जाए।

आप MilvusDM का भी उपयोग कर सकते हैं ताकि आप डेटा को Milvus में ले जा सकें। MilvusDM एक ओपन-सोर्स टूल है जो Milvus के साथ डेटा को आयात और निर्यात के लिए विशेष रूप से डिज़ाइन किया गया है।

Milvus 2.1 VARCHAR डेटा प्रकार का समर्थन करता है जो स्कैलर फ़ील्ड के लिए है। जब किसी VARCHAR प्रकार के स्कैलर फील्ड के लिए एक इंडेक्स बनाया जाता है, तो डिफ़ॉल्ट इंडेक्स प्रकार एक ट्राई होता है।

निम्नलिखित उदाहरण में 2,000 पंक्तियों के रूप में यादृच्छिक रूप से उत्पन्न डेटा को नमूना डेटा के रूप में डाला जाता है (Milvus CLI उदाहरण के रूप में एक पूर्व-निर्मित दूरस्थ 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("डेटा डालने में विफल:", err.Error())
}
पैरामीटर विवरण
ctx API कॉल प्रक्रिया को नियंत्रित करने के लिए उपयोग की गई संदर्भ।
CollectionName डेटा डालने के लिए संग्रह का नाम।
partitionName डेटा को डालने के लिए पार्टीशन का नाम। अगर खाली छोड़ा जाता है, तो डेटा डिफ़ॉल्ट पार्टीशन में डाला जाएगा।
columnarData प्रत्येक फ़ील्ड में डालने वाला डेटा।

जब एक संग्रह में निम्नलिखित एंटिटियों को डाला जाता है जो पहले से इंडेक्स किया गया है, तो आपको संग्रह को फिर से इंडेक्स करने की आवश्यकता नहीं है क्योंकि Milvus स्वचालित रूप से नए डाले गए डेटा के लिए एक इंडेक्स बनाएगा।

Milvus में डेटा को ताज़ा करना

Jab Milvus mein data dalte hain, to yeh segments mein daal diya jata hai. Segments ko band aur indexed karne ke liye ek nishchit size tak pahunchna chahiye. Unsealed segments brute force search ke madhyam se query kiye jayenge. Is situation se bachne ke liye, flush() ko call karna sabse achha hai. flush() method rehne wale segments ko seal karta hai aur unhe index ke liye bhejta hai. Isko sirf tab call karna bahut mahatvapurn hai jab insert session khatam hota hai. Isko adhikatam baar call karma seh ja sakta hai jisse fragmented data ho jayegi, jo baad mein saaf kiya jana hoga.

सीमाएँ

सुविधा अधिकतम सीमा
वेक्टर आयाम 32,768

डेटा को अद्यतन करना

डेटा की तैयारी

सबसे पहले, अपडेट करने के लिए डेटा की तैयारी करें। अपडेट करने वाले डेटा का प्रकार कलेक्शन के स्कीमा से मेल खाना चाहिए, अन्यथा 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)
}