Memasukkan Entitas

Bagian ini menjelaskan cara memasukkan data ke Milvus melalui sisi klien.

Anda juga dapat menggunakan MilvusDM untuk memigrasikan data ke Milvus. MilvusDM adalah alat sumber terbuka yang dirancang khusus untuk mengimpor dan mengekspor data Milvus.

Milvus 2.1 mendukung tipe data VARCHAR pada bidang skalar. Saat membangun indeks untuk bidang skalar tipe VARCHAR, tipe indeks defaultnya adalah trie.

Contoh berikut memasukkan 2.000 baris data yang dihasilkan secara acak sebagai contoh data (contoh Milvus CLI menggunakan file CSV jarak jauh yang telah dibangun sebelumnya yang berisi data serupa). Aplikasi dunia nyata sering menggunakan vektor berdimensi lebih tinggi daripada contoh ini. Anda dapat menyiapkan data Anda sendiri untuk menggantikan data contoh.

Persiapan Data

Pertama, siapkan data yang akan dimasukkan. Tipe data yang akan dimasukkan harus sesuai dengan skema koleksi, jika tidak Milvus akan menimbulkan pengecualian.

Milvus mendukung nilai default untuk bidang skalar, kecuali untuk bidang kunci utama. Ini berarti bahwa selama penyisipan atau pembaruan data, beberapa bidang dapat dibiarkan kosong. Untuk informasi lebih lanjut, lihat Pembuatan Koleksi.

Setelah mengaktifkan skema dinamis, Anda dapat menambahkan bidang dinamis ke data. Untuk informasi lebih lanjut, lihat Skema Dinamis.

import random
data = [
  [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,
]

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

Memasukkan Data ke Milvus

Masukkan data ke dalam koleksi.

Dengan menentukan partition_name, Anda dapat memilih partisi mana untuk memasukkan data.

from pymilvus import Collection
collection = Collection("book")      # Dapatkan koleksi yang sudah ada.
mr = collection.insert(data)
Parameter Deskripsi
data Data yang akan dimasukkan ke Milvus.
partition_name (opsional) Nama partisi tempat data akan dimasukkan.

Setelah memasukkan entitas ke dalam koleksi yang sebelumnya diindeks, tidak perlu untuk kembali mengindeks koleksi, karena Milvus akan secara otomatis membuat indeks untuk data yang baru dimasukkan. Untuk informasi lebih lanjut, lihat Bisakah Indeks Dibuat Setelah Memasukkan Vektor?

Me-refresh Data di Milvus

Ketika data dimasukkan ke dalam Milvus, data dimasukkan ke dalam segmen. Segmen harus mencapai ukuran tertentu untuk disegel dan diindeks. Segmen yang belum disegel akan menggunakan pencarian paksa. Untuk menghindari situasi ini, sebaiknya panggil flush() untuk data yang tersisa. Panggilan flush() akan menutup segmen yang tersisa dan mengirimkannya ke indeks. Penting untuk memanggil metode ini hanya di akhir sesi penyisipan. Memanggilnya terlalu sering dapat mengakibatkan data yang menjadi terfragmentasi yang perlu dibersihkan kemudian.

Batasan

Fitur Batasan Maksimum
Dimensi Vektor 32.768

Memperbarui Entitas (Upsert Entity)

Pembaruan upsert merupakan kombinasi operasi penyisipan dan penghapusan. Dalam konteks basis data vektor Milvus, pembaruan adalah operasi tingkat data. Ini akan menimpa entitas yang ada jika bidang yang ditentukan ada dalam koleksi, dan memasukkan entitas baru jika nilai yang ditentukan tidak ada.

Contoh berikut memperbarui 3.000 baris data yang dihasilkan secara acak sebagai contoh data. Saat melakukan operasi pembaruan, penting untuk dicatat bahwa operasi ini dapat memengaruhi kinerja karena melibatkan penghapusan data.

Persiapan Data

Pertama, siapkan data yang akan diperbarui. Tipe data yang akan diperbarui harus sesuai dengan skema koleksi, jika tidak Milvus akan menimbulkan pengecualian.

Milvus mendukung nilai default untuk bidang skalar, kecuali untuk bidang kunci utama. Ini berarti bahwa selama penyisipan atau pembaruan data, beberapa bidang dapat dibiarkan kosong. Untuk informasi lebih lanjut, silakan merujuk ke pembuatan koleksi.

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

Memperbarui Data

Perbarui data ke koleksi.

from pymilvus import Collection
collection = Collection("book")  # Dapatkan koleksi yang sudah ada.
mr = collection.upsert(data)

Menghapus Entitas

Milvus mendukung penghapusan entitas menggunakan ekspresi boolean melalui kunci utama.

Menyiapkan Ekspresi Boolean

Siapkan ekspresi boolean untuk menyaring entitas yang akan dihapus.

Milvus hanya mendukung penghapusan entitas dengan kunci utama yang secara eksplisit ditentukan, yang dapat dicapai dengan menggunakan operator "in". Operator lain hanya dapat digunakan dalam penyaringan skalar untuk kueri atau pencarian vektor.

Contoh berikut menyaring data menggunakan nilai kunci utama 0 dan 1.

expr = "book_id in [0,1]"

Mirip dengan pernyataan klausa WHERE SQL

Menghapus Entitas

Gunakan ekspresi boolean yang telah Anda buat untuk menghapus entitas. Milvus akan mengembalikan daftar ID dari entitas yang dihapus.

from pymilvus import Collection
collection = Collection("book")      # Dapatkan koleksi yang sudah ada.
collection.delete(expr)

Kompak Data

Milvus mendukung kompresi data otomatis secara default. Anda dapat mengonfigurasi Milvus untuk mengaktifkan atau menonaktifkan kompresi dan kompresi otomatis.

Jika kompresi otomatis dinonaktifkan, Anda masih dapat mengkompres data secara manual.

Kompres Data Secara Manual

Karena kompresi biasanya memerlukan waktu yang lama, permintaan kompresi diproses secara asinkron.

from pymilvus import Collection
collection = Collection("book")      # Dapatkan koleksi yang sudah ada.
collection.compact()

Periksa Status Kompresi

Anda dapat menggunakan ID kompresi yang dikembalikan saat memicu kompresi manual untuk memeriksa status kompresi.

collection.get_compaction_state()