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)
}