Entite Ekleme

Bu konu, istemci tarafından Milvus'a veri eklemenin nasıl yapılacağını açıklar.

Ayrıca verileri Milvus'a göç etmek için MilvusDM'i de kullanabilirsiniz. MilvusDM, Milvus ile veri alışverişi yapmak için özel olarak tasarlanmış açık kaynaklı bir araçtır.

Milvus 2.1, skalara alanlar için VARCHAR veri tipini destekler. VARCHAR türünde bir skalara alan için endeks oluşturulurken, varsayılan endeks türü trie'dir.

Aşağıdaki örnek, rastgele oluşturulmuş 2.000 satır veriyi örnek veri olarak ekler (Milvus komut satırı arayüzü örneği benzer veri içeren önceden oluşturulmuş uzak CSV dosyasını kullanır). Gerçek uygulamalar örnektekinden daha yüksek boyutlu vektörler kullanabilir. Örneği yerine kendi verilerinizi hazırlayabilirsiniz.

Veriyi Hazırlama

İlk olarak, eklemek için veriyi hazırlayın. Eklemek için verinin veri türü, koleksiyonun şemasıyla eşleşmelidir, aksi takdirde Milvus bir istisna fırlatacaktır.

Milvus, birincil anahtar alanlarını hariç tutarak skalar alanlar için varsayılan değerleri destekler. Bu, veri ekleme veya güncelleme sırasında belirli alanların boş bırakılabileceği anlamına gelir. Daha fazla bilgi için bir koleksiyon oluşturmaya bakın.

Dinamik şemayı etkinleştirdikten sonra, veriye dinamik alanlar ekleyebilirsiniz. Daha fazla bilgi için dinamik şema bölümüne bakın.

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'a Veri Eklemek

Veriyi bir koleksiyona ekleyin.

partition_name belirterek veriyi hangi bölüme ekleyeceğinizi seçebilirsiniz.

_, err = milvusClient.Insert(
	context.Background(), // ctx
	"book",               // CollectionName
	"",                   // partitionName
	idColumn,             // columnarData
	wordColumn,           // columnarData
	introColumn,          // columnarData
)
if err != nil {
	log.Fatal("veri eklenemedi:", err.Error())
}
Parametre Açıklama
ctx API çağrısı sürecini kontrol etmek için kullanılan bağlam.
CollectionName Verinin ekleneceği koleksiyonun adı.
partitionName Verinin ekleneceği bölümün adı. Boş bırakılırsa, veri varsayılan bölüme eklenir.
columnarData Her alana eklenecek veri.

Daha önceden endekslenmiş bir koleksiyona varlıklar ekledikten sonra, koleksiyonu tekrar endekslemenize gerek yoktur çünkü Milvus yeni eklenen veriler için otomatik olarak bir endeks oluşturur.

Milvus'ta Veriyi Yenileme

Milvus'a veri eklediğinizde, veri segmentlere eklenir. Segmentlerin mühürlenip endekslenmesi için belirli bir boyuta ulaşmaları gerekir. Mühürlenmemiş segmentler kaba kuvvetle arama yapılır. Bu durumu önlemek için flush() yöntemini çağırmak en iyisidir. flush() yöntemi, kalan segmentleri mühürler ve bunları endekse gönderir. Bu yöntemi yalnızca ekleme işlemi sona erdiğinde çağırmak çok önemlidir. Bu yöntemi sıkça çağırmak, parçalı verilere yol açabilir ve bu daha sonra temizlenmesi gereken parçalı verilere yol açabilir.

Sınırlamalar

Özellik Maksimum Sınır
Vektör Boyutu 32,768

Veriyi Güncelleme

Veri Hazırlığı

İlk olarak, güncellenmesi gereken veriler hazırlanmalıdır. Güncellenecek veri türü, koleksiyonun şemasıyla eşleşmelidir. Aksi takdirde, Milvus bir istisna fırlatacaktır.

Milvus, birincil anahtar alanları hariç olmak üzere, skaler alanlar için varsayılan değerleri destekler. Bu, veri ekleme veya güncelleme işlemi sırasında belirli alanların boş kalabileceği anlamına gelir. Daha fazla bilgi için lütfen koleksiyon oluşturma bölümüne başvurun.

nEntities := 3000
boyut := 8
idList := make([]int64, 0, nEntities)
randomList := make([]float64, 0, nEntities)
gömmeListesi := 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++ {
    v := make([]float32, 0, boyut)
    for j := 0; j < boyut; j++ {
        v = append(v, rand.Float32())
    }
    gömmeListesi = append(gömmeListesi, v)
}
idSütunVerisi := entity.NewColumnInt64("ID", idList)
rastgeleSütunVerisi := entity.NewColumnDouble("rastgele", randomList)
gömmeSütunVerisi := entity.NewColumnFloatVector("gömme", boyut, gömmeListesi)

Veri Güncelleme

Verileri koleksiyona güncelleyin.

if _, err := c.Upsert(ctx, collectionName, "", idSütunVerisi, gömmeSütunVerisi);
err != nil {
    log.Fatalf("veri güncelleme başarısız oldu, hata: %v", err)
}