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