🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda
  • Pertanyaan Umum
  • Home
  • Docs
  • Pertanyaan Umum

  • Pertanyaan Umum Produk

Tanya Jawab Produk

Berapa harga Milvus?

Milvus adalah proyek sumber terbuka yang 100% gratis.

Harap patuhi Lisensi Apache 2.0 ketika menggunakan Milvus untuk tujuan produksi atau distribusi.

Zilliz, perusahaan di balik Milvus, juga menawarkan versi cloud yang dikelola sepenuhnya dari platform ini bagi mereka yang tidak ingin membangun dan memelihara instance terdistribusi mereka sendiri. Zilliz Cloud secara otomatis menjaga keandalan data dan memungkinkan pengguna membayar hanya untuk apa yang mereka gunakan.

Apakah Milvus mendukung arsitektur non-x86?

Milvus tidak dapat diinstal atau dijalankan pada platform non-x86.

CPU Anda harus mendukung salah satu set instruksi berikut untuk menjalankan Milvus: SSE4.2, AVX, AVX2, AVX512. Ini semua adalah set instruksi SIMD khusus x86.

Di mana Milvus menyimpan data?

Milvus menangani dua jenis data, data yang disisipkan dan metadata.

Data yang disisipkan, termasuk data vektor, data skalar, dan skema khusus koleksi, disimpan dalam penyimpanan persisten sebagai log tambahan. Milvus mendukung beberapa backend penyimpanan objek, termasuk MinIO, AWS S3, Google Cloud Storage (GCS), Azure Blob Storage, Alibaba Cloud OSS, dan Tencent Cloud Object Storage (COS).

Metadata dibuat di dalam Milvus. Setiap modul Milvus memiliki metadata sendiri yang disimpan dalam etcd.

Mengapa tidak ada data vektor di etcd?

etcd menyimpan metadata modul Milvus; MinIO menyimpan entitas.

Apakah Milvus mendukung penyisipan dan pencarian data secara bersamaan?

Ya. Operasi penyisipan dan operasi kueri ditangani oleh dua modul terpisah yang saling independen. Dari perspektif klien, operasi penyisipan selesai ketika data yang disisipkan masuk ke dalam antrian pesan. Namun, data yang disisipkan tidak dapat dicari sampai data tersebut dimuat ke node kueri. Jika ukuran segmen tidak mencapai ambang batas pembuatan indeks (512 MB secara default), Milvus menggunakan pencarian brute-force dan kinerja kueri dapat berkurang.

Dapatkah vektor dengan kunci primer ganda dimasukkan ke dalam Milvus?

Ya. Milvus tidak memeriksa apakah kunci primer vektor adalah duplikat.

Ketika vektor dengan kunci primer ganda dimasukkan, apakah Milvus memperlakukannya sebagai operasi pembaruan?

Tidak. Milvus saat ini tidak mendukung operasi pembaruan dan tidak memeriksa apakah kunci utama entitas adalah duplikat. Anda bertanggung jawab untuk memastikan bahwa primary key entitas adalah unik, dan jika tidak, Milvus dapat berisi beberapa entitas dengan primary key yang terduplikasi.

Jika hal ini terjadi, salinan data mana yang akan dikembalikan ketika ditanyakan masih belum diketahui. Batasan ini akan diperbaiki di rilis mendatang.

Berapa panjang maksimum dari kunci primer entitas yang ditentukan sendiri?

Kunci utama entitas harus berupa bilangan bulat 64-bit non-negatif.

Berapa jumlah maksimum data yang dapat ditambahkan per operasi penyisipan?

Operasi penyisipan tidak boleh melebihi ukuran 1.024 MB. Ini adalah batas yang ditetapkan oleh gRPC.

Apakah ukuran koleksi memengaruhi performa kueri saat mencari di partisi tertentu?

Tidak. Jika partisi untuk pencarian ditentukan, Milvus hanya akan mencari di partisi yang ditentukan.

Tergantung data apa yang dibutuhkan untuk pencarian. Semua partisi yang mungkin muncul dalam hasil pencarian harus dimuat sebelum melakukan pencarian.

  • Sebagai contoh, jika Anda hanya ingin mencari partisi tertentu, Anda tidak perlu memuat semua partisi. Panggil load_partition() untuk memuat partisi yang dituju , lalu tentukan partisi dalam pemanggilan metode search().
  • Jika Anda ingin mencari semua partisi, panggil load_collection() untuk memuat seluruh koleksi termasuk semua partisi.
  • Jika Anda gagal memuat koleksi atau partisi tertentu sebelum melakukan pencarian, Milvus akan mengembalikan kesalahan.

Dapatkah indeks dibuat setelah memasukkan vektor?

Ya. Jika indeks telah dibuat untuk koleksi oleh create_index() sebelumnya, Milvus akan secara otomatis membuat indeks untuk vektor yang disisipkan setelahnya. Namun, Milvus tidak membuat indeks sampai vektor yang baru disisipkan memenuhi seluruh ruas dan berkas indeks yang baru dibuat terpisah dari berkas indeks sebelumnya.

Apa perbedaan antara indeks FLAT dan IVF_FLAT?

Indeks IVF_FLAT membagi ruang vektor ke dalam kelompok daftar. Pada nilai daftar default 16.384, Milvus membandingkan jarak antara vektor target dan centroid dari semua 16.384 klaster untuk kembali menyelidiki klaster terdekat. Milvus kemudian membandingkan jarak antara vektor target dan vektor dalam cluster yang dipilih untuk mendapatkan vektor terdekat. Tidak seperti IVF_FLAT, FLAT secara langsung membandingkan jarak antara vektor target dan setiap vektor lainnya.

Ketika jumlah total vektor kurang lebih sama dengan nlist, hanya ada sedikit perbedaan antara IVF_FLAT dan FLAT dalam hal persyaratan perhitungan dan kinerja pencarian. Namun, ketika jumlah vektor melebihi nlist dengan faktor dua atau lebih, IVF_FLAT mulai menunjukkan keunggulan kinerja.

Lihat Indeks Vektor untuk informasi lebih lanjut.

Bagaimana cara Milvus mem-flash data?

Milvus mengembalikan hasil yang sukses ketika data yang disisipkan dimasukkan ke dalam antrean pesan. Namun, data belum di-flush ke disk. Kemudian simpul data Milvus menulis data dalam antrean pesan ke penyimpanan persisten sebagai log tambahan. Jika flush() dipanggil, simpul data dipaksa untuk menulis semua data dalam antrean pesan ke penyimpanan persisten dengan segera.

Apa yang dimaksud dengan normalisasi? Mengapa normalisasi dibutuhkan?

Normalisasi mengacu pada proses mengubah sebuah vektor sehingga normanya sama dengan 1. Jika inner product digunakan untuk menghitung kesamaan vektor, vektor harus dinormalisasi. Setelah normalisasi, hasil kali dalam sama dengan kemiripan kosinus.

Lihat Wikipedia untuk informasi lebih lanjut.

Mengapa jarak Euclidean (L2) dan inner product (IP) memberikan hasil yang berbeda?

Untuk vektor yang dinormalisasi, jarak Euclidean (L2) secara matematis setara dengan inner product (IP). Jika metrik kemiripan ini memberikan hasil yang berbeda, periksa apakah vektor Anda dinormalisasi

Apakah ada batasan jumlah total koleksi dan partisi di Milvus?

Ya, Anda dapat membuat hingga 65.535 koleksi dalam sebuah instans Milvus. Ketika menghitung jumlah koleksi yang ada, Milvus menghitung semua koleksi dengan pecahan dan partisi di dalamnya.

Sebagai contoh, anggaplah Anda telah membuat 100 koleksi, dengan 2 pecahan dan 4 partisi di 60 koleksi dan 1 pecahan dan 12 partisi di 40 koleksi lainnya. Jumlah koleksi saat ini dapat dihitung sebagai:

60 * 2 * 4 + 40 * 1 * 12 = 960

Mengapa saya mendapatkan lebih sedikit dari k vektor ketika mencari vektor topk?

Di antara indeks-indeks yang didukung Milvus, IVF_FLAT dan IVF_SQ8 mengimplementasikan metode pengelompokan k-means. Sebuah ruang data dibagi menjadi beberapa cluster nlist dan vektor yang dimasukkan didistribusikan ke cluster-cluster ini. Milvus kemudian memilih nprobe cluster terdekat dan membandingkan jarak antara vektor target dan semua vektor dalam cluster yang dipilih untuk mengembalikan hasil akhir.

Jika nlist dan topk besar dan nprobe kecil, jumlah vektor dalam klaster nprobe mungkin kurang dari k. Oleh karena itu, ketika Anda mencari topk vektor terdekat, jumlah vektor yang dikembalikan kurang dari k.

Untuk menghindari hal ini, coba atur nprobe lebih besar dan nlist dan k lebih kecil.

Lihat Indeks Vektor untuk informasi lebih lanjut.

Berapa dimensi vektor maksimum yang didukung oleh Milvus?

Milvus dapat mengelola vektor hingga 32.768 dimensi secara default. Anda dapat meningkatkan nilai Proxy.maxDimension untuk memungkinkan vektor dengan dimensi yang lebih besar.

Apakah Milvus mendukung CPU Apple M1?

Rilis Milvus saat ini tidak mendukung Apple M1 CPU secara langsung. Setelah Milvus 2.3, Milvus menyediakan image Docker untuk arsitektur ARM64.

Tipe data apa yang didukung Milvus pada bidang kunci utama?

Pada rilis saat ini, Milvus mendukung INT64 dan string.

Apakah Milvus dapat diskalakan?

Ya. Anda dapat menggunakan cluster Milvus dengan banyak node melalui Helm Chart di Kubernetes. Lihat Panduan Skala untuk instruksi lebih lanjut.

Apa yang dimaksud dengan growing segment dan sealed segment?

Ketika permintaan pencarian datang, Milvus mencari data tambahan dan data historis. Data tambahan adalah pembaruan terkini, yang disimpan di segmen yang berkembang, yang disangga dalam memori sebelum mencapai ambang batas untuk dipertahankan dalam penyimpanan objek dan indeks yang lebih efisien dibuat untuknya, sedangkan data historis adalah pembaruan beberapa waktu yang lalu. Data tersebut berada dalam segmen tertutup yang telah disimpan dalam penyimpanan objek. Data tambahan dan data historis bersama-sama membentuk keseluruhan kumpulan data untuk pencarian. Desain ini membuat data apa pun yang dimasukkan ke Milvus dapat langsung dicari. Untuk Milvus Distributed, ada faktor yang lebih kompleks yang menentukan kapan sebuah record yang baru saja dimasukkan dapat muncul di hasil pencarian. Pelajari lebih lanjut mengenai hal tersebut di tingkat konsistensi.

Ya. Untuk kueri pada koleksi yang sama, Milvus secara bersamaan mencari data tambahan dan data historis. Namun, pencarian pada koleksi yang berbeda dilakukan secara berurutan. Meskipun data historis dapat berupa kumpulan data yang sangat besar, pencarian pada data historis relatif lebih memakan waktu dan pada dasarnya dilakukan secara seri.

Mengapa data di MinIO tetap ada setelah koleksi yang bersangkutan dihapus?

Data di MinIO dirancang untuk tetap ada selama jangka waktu tertentu untuk kenyamanan pengembalian data.

Apakah Milvus mendukung mesin pesan selain Pulsar?

Ya. Kafka didukung di Milvus 2.1.0.

Apa perbedaan antara pencarian dan kueri?

Di Milvus, pencarian kemiripan vektor mengambil vektor berdasarkan perhitungan kemiripan dan akselerasi indeks vektor. Tidak seperti pencarian kemiripan vektor, kueri vektor mengambil vektor melalui pemfilteran skalar berdasarkan ekspresi boolean. Ekspresi boolean memfilter bidang skalar atau bidang kunci utama, dan mengambil semua hasil yang cocok dengan filter. Dalam kueri, tidak ada metrik kemiripan maupun indeks vektor yang terlibat.

Mengapa nilai vektor float memiliki ketepatan 7 digit desimal di Milvus?

Milvus mendukung penyimpanan vektor sebagai larik Float32. Nilai Float32 memiliki ketelitian 7 digit desimal. Bahkan dengan nilai Float64, seperti 1.3476964684980388, Milvus menyimpannya sebagai 1.347696. Oleh karena itu, ketika Anda mengambil vektor seperti itu dari Milvus, ketepatan nilai Float64 akan hilang.

Bagaimana Milvus menangani tipe data vektor dan ketepatannya?

Milvus mendukung tipe vektor Biner, Float32, Float16, dan BFloat16.

  • Vektor biner: Menyimpan data biner sebagai urutan 0 dan 1, yang digunakan dalam pemrosesan gambar dan pengambilan informasi.
  • Vektor Float32: Penyimpanan default dengan presisi sekitar 7 digit desimal. Bahkan nilai Float64 pun disimpan dengan presisi Float32, yang menyebabkan potensi kehilangan presisi pada saat pengambilan.
  • Vektor Float16 dan BFloat16: Menawarkan pengurangan presisi dan penggunaan memori. Float16 cocok untuk aplikasi dengan bandwidth dan penyimpanan terbatas, sedangkan BFloat16 menyeimbangkan jangkauan dan efisiensi, biasanya digunakan dalam deep learning untuk mengurangi kebutuhan komputasi tanpa memengaruhi akurasi secara signifikan.

Apakah Milvus mendukung penentuan nilai default untuk bidang skalar atau vektor?

Saat ini, Milvus 2.4.x tidak mendukung penentuan nilai default untuk bidang skalar atau vektor. Fitur ini direncanakan untuk rilis mendatang.

Apakah ruang penyimpanan akan langsung tersedia setelah penghapusan data di Milvus?

Tidak, ruang penyimpanan tidak akan langsung dilepaskan ketika Anda menghapus data di Milvus. Meskipun menghapus data menandai entitas sebagai "dihapus secara logis", ruang penyimpanan yang sebenarnya mungkin tidak langsung kosong. Inilah alasannya:

  • Pemadatan: Milvus secara otomatis memadatkan data di latar belakang. Proses ini menggabungkan segmen data yang lebih kecil menjadi lebih besar dan menghapus data yang dihapus secara logis (entitas yang ditandai untuk dihapus) atau data yang telah melampaui Time-To-Live (TTL). Namun, pemadatan menciptakan segmen baru sekaligus menandai segmen lama sebagai "Dibuang".
  • Pengumpulan Sampah: Proses terpisah yang disebut Garbage Collection (GC) secara berkala menghapus segmen "Dropped" ini, membebaskan ruang penyimpanan yang mereka tempati. Hal ini memastikan penggunaan penyimpanan yang efisien, tetapi dapat menimbulkan sedikit penundaan antara penghapusan dan reklamasi ruang.

Dapatkah saya melihat data yang disisipkan, dihapus, atau disisipkan segera setelah operasi tanpa menunggu flush?

Ya, di Milvus, visibilitas data tidak secara langsung terkait dengan operasi flush karena arsitektur pemilahan komputasi penyimpanannya. Anda dapat mengelola keterbacaan data menggunakan tingkat konsistensi.

Ketika memilih tingkat konsistensi, pertimbangkan trade-off antara konsistensi dan kinerja. Untuk operasi yang membutuhkan visibilitas langsung, gunakan tingkat konsistensi "Kuat". Untuk penulisan yang lebih cepat, prioritaskan konsistensi yang lebih lemah (data mungkin tidak langsung terlihat). Untuk informasi lebih lanjut, lihat Konsistensi.

Setelah mengaktifkan fitur kunci partisi, berapa nilai default dari num_partitions di Milvus, dan mengapa?

Ketika fitur kunci partisi diaktifkan, nilai default dari num_partitions di Milvus diatur ke 16. Nilai default ini dipilih karena alasan stabilitas dan kinerja. Anda dapat menyesuaikan nilai num_partitions sesuai kebutuhan dengan menentukannya di fungsi create_collection.

Apakah ada batas panjang maksimum untuk ekspresi pemfilteran skalar?

Ya, panjang maksimum ekspresi pemfilteran skalar dibatasi oleh batas transfer RPC, yang ditentukan dalam file konfigurasi milvus.yaml. Secara khusus, batas tersebut ditetapkan oleh parameter serverMaxRecvSize di bawah bagian proxy:

proxy:
  grpc:
    serverMaxRecvSize: 67108864 # The maximum size of each RPC request that the proxy can receive, unit: byte

Secara default, ukuran maksimum setiap permintaan RPC adalah 64MB. Oleh karena itu, panjang ekspresi pemfilteran harus kurang dari batas ini untuk memastikan pemrosesan yang berhasil.

Saat melakukan pencarian vektor massal, berapa banyak vektor yang dapat ditentukan sekaligus? Apakah ada batasnya?

Ya, jumlah vektor yang dapat ditentukan dalam pencarian vektor massal dibatasi oleh ukuran transfer RPC, seperti yang ditentukan dalam file konfigurasi milvus.yaml. Batas ini ditentukan oleh parameter serverMaxRecvSize di bawah bagian proxy:

proxy:
  grpc:
    serverMaxRecvSize: 67108864 # The maximum size of each RPC request that the proxy can receive, unit: byte

Secara default, ukuran maksimum setiap permintaan RPC adalah 64MB. Oleh karena itu, ukuran total vektor input, termasuk data dimensi dan metadata, harus kurang dari batas ini untuk memastikan eksekusi yang sukses.

Bagaimana cara mendapatkan semua nilai unik dari bidang skalar yang diberikan dari sebuah koleksi?

Saat ini, tidak ada metode langsung untuk mencapai hal ini. Sebagai solusinya, kami sarankan untuk menggunakan query_iterator untuk mengambil semua nilai dari suatu field tertentu, lalu melakukan deduplikasi secara manual. Kami berencana untuk menambahkan dukungan langsung untuk fitur ini di Milvus 2.6. Contoh penggunaan query_iterator:

# set up iterator
iterator = client.query_iterator(
    collection_name="demo_collection",
    output_fields=["target"]
)
# do iteration and store target values into value_set 
value_set = set()
while True:
    res = iterator.next()
    if len(res) == 0:
        print("query iteration finished, close")
        iterator.close()
        break
    for i in range(len(res)):
        value_set.add(res[i]["target"])

# value_set will contain unique values for target column    

Apa saja batasan-batasan dalam menggunakan field dinamis? Sebagai contoh, apakah ada batasan ukuran, metode modifikasi, atau batasan pengindeksan?

Field dinamis direpresentasikan secara internal menggunakan field JSON, dengan batas ukuran 65.536 byte. Mereka mendukung modifikasi yang dapat dilakukan, sehingga Anda dapat menambah atau memperbarui field. Namun, sejak Milvus 2.5.1, field dinamis tidak mendukung pengindeksan. Dukungan untuk menambahkan indeks untuk JSON akan diperkenalkan pada rilis mendatang.

Apakah Milvus mendukung perubahan skema?

Pada Milvus versi 2.5.0, perubahan skema terbatas pada modifikasi tertentu, seperti menyesuaikan properti seperti parameter mmap. Pengguna juga dapat memodifikasi max_length untuk field varchar dan max_capacity untuk field array. Namun, kemampuan untuk menambah atau menghapus field dalam skema direncanakan untuk rilis mendatang, untuk meningkatkan fleksibilitas manajemen skema dalam Milvus.

Apakah memodifikasi max_length untuk VarChar memerlukan reorganisasi data?

Tidak, memodifikasi max_length untuk field VarChar tidak memerlukan reorganisasi data, seperti pemadatan atau reorganisasi. Penyesuaian ini terutama memperbarui kriteria validasi untuk setiap data baru yang dimasukkan ke dalam bidang, sehingga data yang sudah ada tidak terpengaruh. Akibatnya, perubahan ini dianggap ringan dan tidak membebankan biaya tambahan yang signifikan pada sistem.

Masih memiliki pertanyaan?

Tentu saja bisa:

  • Lihat Milvus di GitHub. Anda dipersilakan untuk mengajukan pertanyaan, berbagi ide, dan membantu orang lain.
  • Bergabunglah dengan komunitas Slack kami untuk mendapatkan dukungan dan terlibat dengan komunitas sumber terbuka kami.

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?