Entite Ekleme

Bu bölüm, istemci tarafından Milvus'a veri ekleme işlemini açıklar.

Ayrıca verileri Milvus'a göç etmek için MilvusDM'i de kullanabilirsiniz. MilvusDM, Milvus verilerini içe ve dışa aktarmak için özel olarak tasarlanmış açık kaynaklı bir araçtır.

Milvus 2.1, skaler alanlarda VARCHAR veri türünü destekler. Bir VARCHAR türünde skaler alan için indeks oluşturulurken, varsayılan indeks türü bir trie'dir.

Aşağıdaki örnek, örnek veriler olarak rastgele oluşturulmuş 2.000 satır veri ekler (Milvus CLI örneği benzer veriler içeren önceden hazırlanmış uzak bir CSV dosyasını kullanır). Gerçek dünya uygulamaları genellikle örneğin gösterildiğinden daha yüksek boyutlu vektörler kullanır. Örnek verileri değiştirmek için kendi verilerinizi hazırlayabilirsiniz.

Veri Hazırlığı

İlk olarak, eklenecek verileri hazırlayın. Eklenen veri türü, koleksiyonun şemasıyla eşleşmelidir; aksi takdirde Milvus istisna fırlatacaktır.

Milvus, birincil anahtar alanları hariç olmak üzere skaler alanlar için varsayılan değerleri destekler. Bu, veri eklerken veya güncellerken bazı alanların boş bırakılabileceği anlamına gelir. Daha fazla bilgi için Bir Koleksiyon Oluşturma'ya bakın.

Dinamik şema özelliğini etkinleştirdikten sonra, veriye dinamik alanlar ekleyebilirsiniz. Detaylı bilgi için Dinamik Şema'ya bakın.

import random
veri = [
  [i for i in range(2000)],
  [str(i) for i in range(2000)],
  [i for i in range(10000, 12000)],
  [[random.random() for _ in range(2)] for _ in range(2000)],
  [], 
  None,
]

veri.append([str("dy"*i) for i in range(2000)])

Milvus'a Veri Ekleme

Koleksiyona veriyi ekleyin.

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

from pymilvus import Collection
koleksiyon = Collection("book")      # Mevcut bir koleksiyon alın.
mr = koleksiyon.insert(veri)
Parametre Açıklama
data Milvus'a eklenecek veri.
partition_name (isteğe bağlı) Verinin ekleneceği bölümün adı.

Daha önceden endekslenmiş bir koleksiyona entiteler ekledikten sonra, eklenen yeni veriler için tekrar endeksleme yapmanıza gerek yoktur, çünkü Milvus otomatik olarak yeni eklenecek veriler için endeksler oluşturacaktır. Daha fazla bilgi için Vektörler Ekledikten Sonra Endeksler Oluşturulabilir mi? konusuna bakın.

Milvus'ta Verileri Güncelleme

Milvus'a veri eklendiğinde, veri segmentlere eklenir. Segmentlerin mühürlenip endekslenmesi için belirli bir boyuta ulaşmaları gerekir. Mühürlenmemiş segmentler, kaba kuvvet aramasını kullanacaktır. Bu durumu önlemek için, kalan veri için flush() metodunu çağırmak en iyisidir. flush() çağrısı, kalan segmentleri mühürleyecek ve bunları endekse gönderecektir. Bu yöntemi yalnızca bir ekleme oturumunun sonunda çağırmak önemlidir. Sık sık çağrılması, sonra temizlenmesi gereken parçalanmış verilere yol açabilir.

Sınırlamalar

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

Entite Güncelleme

Güncelleme işlemi, ekleme ve silme işlemlerinin birleşimidir. Milvus vektör veritabanı bağlamında güncelleme, veri düzeyinde bir işlemdir. Belirtilen alan koleksiyonda varsa mevcut entity'yi üzerine yazar ve belirtilen değer mevcut değilse yeni bir entity ekler.

Aşağıdaki örnek, örnek veriler olarak rastgele oluşturulmuş 3.000 satır veriyi günceller. Güncelleme işlemi yapılırken, bu işlemin veri silme işlemi içermesi nedeniyle performansı etkileyebileceğine dikkat etmek önemlidir.

Veri Hazırlama

İlk olarak, güncellenecek verileri hazırlayın. Güncellenen veri türü, koleksiyonun şemasıyla eşleşmelidir; aksi takdirde Milvus istisna fırlatacaktır.

Milvus, birincil anahtar alanları hariç olmak üzere skaler alanlar için varsayılan değerleri destekler. Bu, veri eklerken veya güncellerken bazı alanların boş bırakılabileceği anlamına gelir. Daha fazla bilgi için koleksiyon oluşturmaya bakınız.

import random
nb = 3000
dim = 8
vektörler = [[random.random() for _ in range(dim)] for _ in range(nb)]
veri = [
    [i for i in range(nb)],
    [str(i) for i in range(nb)],
    [i for i in range(10000, 10000+nb)],
    vektörler,
    [str("dy"*i) for i in range(nb)]
]

Veriyi Güncelleme

Veriyi koleksiyona güncelleyin.

from pymilvus import Collection
koleksiyon = Collection("book")  # Mevcut koleksiyonu alın.
mr = koleksiyon.upsert(veri)

Entite Silme

Milvus, birincil anahtarlar aracılığıyla bir ifade kullanarak entite silme işlemini destekler.

Boolean İfade Hazırla

Silinecek varlıkları filtrelemek için bir boolean ifade hazırlayın.

Milvus, yalnızca açıkça belirtilmiş birincil anahtarlara sahip varlıkları silmeyi destekler, bu da "in" operatörünü kullanarak başarılabilir. Diğer operatörler yalnızca sorgulama veya vektör araması için skaler filtrelemede kullanılabilir.

Aşağıdaki örnek, 0 ve 1 birincil anahtar değerlerini kullanarak verileri filtreler.

expr = "book_id in [0,1]"

SQL WHERE ifadesine benzer

Varlık Silme

Oluşturduğunuz boolean ifadesini kullanarak varlıkları silmek için.

from pymilvus import Collection
collection = Collection("kitap")      # Mevcut koleksiyonu al.
collection.delete(expr)

Veriyi Sıkıştır

Milvus varsayılan olarak otomatik veri sıkıştırmasını destekler. Milvus'u sıkıştırmayı ve otomatik sıkıştırmayı etkinleştirmek veya devre dışı bırakmak için yapılandırabilirsiniz.

Otomatik sıkıştırma devre dışı bırakıldığında, veriyi hâlâ manuel olarak sıkıştırabilirsiniz.

Veriyi Manuel Olarak Sıkıştır

Sıkıştırma genellikle uzun zaman alacağından, sıkıştırma istekleri asenkron olarak işlenir.

from pymilvus import Collection
collection = Collection("kitap")      # Mevcut koleksiyonu al.
collection.compact()

Sıkıştırma Durumunu Kontrol Et

Manuel sıkıştırmayı tetiklerken dönen sıkıştırma kimliğini kullanarak sıkıştırma durumunu kontrol edebilirsiniz.

collection.get_compaction_state()