Penghancuran JSONCompatible with Milvus 2.6.2+
Penghancuran JSON mempercepat kueri JSON dengan mengubah penyimpanan berbasis baris tradisional menjadi penyimpanan kolom yang dioptimalkan. Sambil mempertahankan fleksibilitas JSON untuk pemodelan data, Milvus melakukan pengoptimalan kolom di belakang layar yang secara dramatis meningkatkan akses dan efisiensi kueri.
Penghancuran JSON efektif untuk sebagian besar skenario kueri JSON. Manfaat kinerja menjadi lebih jelas dengan:
Dokumen JSON yang lebih besar dan lebih kompleks - Peningkatan kinerja yang lebih besar seiring bertambahnya ukuran dokumen
Beban kerja yang berat untuk dibaca - Pemfilteran, penyortiran, atau pencarian yang sering dilakukan pada kunci JSON
Pola kueri campuran - Kueri di berbagai kunci JSON yang berbeda mendapatkan manfaat dari pendekatan penyimpanan hibrida
Bagaimana cara kerjanya
Proses penghancuran JSON terjadi dalam tiga fase yang berbeda untuk mengoptimalkan data agar dapat diambil dengan cepat.
Fase 1: Pencernaan & klasifikasi kunci
Ketika dokumen JSON baru ditulis, Milvus secara terus menerus mengambil sampel dan menganalisisnya untuk membangun statistik untuk setiap kunci JSON. Analisis ini mencakup rasio kemunculan kunci dan stabilitas tipe (apakah tipe datanya konsisten di seluruh dokumen).
Berdasarkan statistik ini, kunci JSON dikategorikan ke dalam beberapa kategori berikut ini untuk penyimpanan yang optimal.
Kategori kunci JSON
Jenis Kunci |
Deskripsi |
|---|---|
Kunci yang diketik |
Kunci yang ada di sebagian besar dokumen dan selalu memiliki tipe data yang sama (misalnya, semua bilangan bulat atau semua string). |
Kunci dinamis |
Kunci yang sering muncul namun memiliki tipe data campuran (misalnya, terkadang berupa string, terkadang berupa bilangan bulat). |
Tombol bersama |
Kunci yang jarang muncul atau kunci bersarang yang berada di bawah ambang batas frekuensi yang dapat dikonfigurasi. |
Contoh klasifikasi
Pertimbangkan contoh data JSON yang berisi kunci JSON berikut ini:
{"a": 10, "b": "str1", "f": 1}
{"a": 20, "b": "str2", "f": 2}
{"a": 30, "b": "str3", "f": 3}
{"a": 40, "b": 1, "f": 4} // b becomes mixed type
{"a": 50, "b": 2, "e": "rare"} // e appears infrequently
Berdasarkan data ini, kunci-kunci tersebut akan diklasifikasikan sebagai berikut:
Kunci yang diketik:
adanf(selalu berupa bilangan bulat)Kunci dinamis:
b(string campuran/bilangan bulat)Kunci bersama:
e(kunci yang jarang muncul)
Tahap 2: Optimalisasi penyimpanan
Klasifikasi dari Fase 1 menentukan tata letak penyimpanan. Milvus menggunakan format kolom yang dioptimalkan untuk kueri.
Alur Penghancuran Json
Kolom-kolom yangdiparut: Untuk kunci yang diketik dan dinamis, data ditulis ke kolom khusus. Penyimpanan kolom ini memungkinkan pemindaian yang cepat dan langsung selama kueri, karena Milvus hanya dapat membaca data yang diperlukan untuk kunci yang diberikan tanpa memproses seluruh dokumen.
Kolom bersama: Semua kunci bersama disimpan bersama dalam satu kolom JSON biner yang ringkas. Indeks terbalik kunci bersama dibangun di atas kolom ini. Indeks ini sangat penting untuk mempercepat kueri pada kunci-kunci berfrekuensi rendah dengan memungkinkan Milvus memangkas data dengan cepat, yang secara efektif mempersempit ruang pencarian menjadi hanya baris-baris yang berisi kunci yang ditentukan.
Fase 3: Eksekusi kueri
Fase terakhir memanfaatkan tata letak penyimpanan yang dioptimalkan untuk memilih jalur tercepat secara cerdas untuk setiap predikat kueri.
Jalur cepat: Kueri dengan kunci yang diketik/dinamis (misalnya,
json['a'] < 100) mengakses kolom khusus secara langsungJalur yangdioptimalkan: Kueri pada kunci bersama (misalnya,
json['e'] = 'rare') menggunakan indeks terbalik untuk menemukan dokumen yang relevan dengan cepat
Mengaktifkan penghancuran JSON
Untuk mengaktifkan fitur ini, setel common.enabledJSONShredding ke true di file konfigurasi milvus.yaml Anda. Data baru akan secara otomatis memicu proses penghancuran.
# milvus.yaml
...
common:
enabledJSONShredding: true # Indicates whether to enable JSON key stats build and load processes
...
Setelah diaktifkan, Milvus akan mulai menganalisis dan merestrukturisasi data JSON Anda saat dikonsumsi tanpa intervensi manual lebih lanjut.
Penyetelan parameter
Untuk sebagian besar pengguna, setelah penghancuran JSON diaktifkan, pengaturan default untuk parameter lainnya sudah cukup. Namun, Anda dapat menyempurnakan perilaku penghancuran JSON menggunakan parameter-parameter ini di milvus.yaml.
Nama Parameter |
Deskripsi |
Nilai Default |
Saran Penyetelan |
|---|---|---|---|
|
Mengontrol apakah proses pembuatan dan pemuatan penghancuran JSON diaktifkan. |
false |
Harus disetel ke true untuk mengaktifkan fitur ini. |
|
Mengontrol apakah Milvus menggunakan data yang diparut untuk akselerasi. |
true |
Diatur ke false sebagai langkah pemulihan jika kueri gagal, kembali ke jalur kueri asli. |
|
Menentukan apakah Milvus menggunakan mmap saat memuat data yang diparut. Untuk detailnya, lihat Gunakan mmap. |
true |
Pengaturan ini umumnya dioptimalkan untuk kinerja. Hanya sesuaikan jika Anda memiliki kebutuhan atau batasan manajemen memori tertentu pada sistem Anda. |
|
Jumlah maksimum kunci JSON yang akan disimpan dalam kolom cacahan. Jika jumlah kunci yang sering muncul melebihi batas ini, Milvus akan memprioritaskan kunci yang paling sering muncul untuk dihancurkan, dan kunci yang tersisa akan disimpan di kolom bersama. |
1024 |
Ini cukup untuk sebagian besar skenario. Untuk JSON dengan ribuan kunci yang sering muncul, Anda mungkin perlu meningkatkannya, tetapi tetap pantau penggunaan penyimpanan. |
|
Rasio kemunculan minimum yang harus dimiliki oleh kunci JSON harus dipertimbangkan untuk dicacah menjadi kolom cacahan. Sebuah kunci dianggap sering muncul jika rasionya di atas ambang batas ini. |
0.3 |
Naikkan (misalnya, menjadi 0,5) jika jumlah kunci yang memenuhi kriteria penghancuran melebihi batas Kurangi (misalnya, menjadi 0,1) jika Anda ingin menghancurkan lebih banyak kunci yang lebih jarang muncul daripada ambang batas default 30%. |
Tolok ukur kinerja
Pengujian kami menunjukkan peningkatan performa yang signifikan di berbagai jenis kunci JSON dan pola kueri.
Lingkungan dan metodologi pengujian
Perangkat keras: 1 inti / 8GB cluster
Dataset: 1 juta dokumen dari JSONBench
Ukuran dokumen rata-rata: 478,89 byte
Durasi pengujian: 100 detik untuk mengukur QPS dan latensi
Hasil: kunci yang diketik
Pengujian ini mengukur performa saat melakukan kueri terhadap kunci yang ada di sebagian besar dokumen.
Ekspresi Kueri |
Jenis Nilai Kunci |
QPS (tanpa penghancuran) |
QPS (dengan penghancuran) |
Peningkatan Kinerja |
|---|---|---|---|---|
|
Bilangan bulat |
8.69 |
287.50 |
33x |
|
String |
8.42 |
126.1 |
14.9x |
Hasil: kunci bersama
Pengujian ini berfokus pada kueri kunci bersarang yang jarang yang termasuk dalam kategori "bersama".
Ekspresi Kueri |
Jenis Nilai Kunci |
QPS (tanpa penghancuran) |
QPS (dengan penghancuran) |
Peningkatan Kinerja |
|---|---|---|---|---|
|
Bilangan Bulat Bersarang |
4.33 |
385 |
88.9x |
|
String Bersarang |
7.6 |
352 |
46.3x |
Wawasan utama
Kueri kunci bersama menunjukkan peningkatan paling dramatis (hingga 89x lebih cepat)
Kueri kunci yang diketik memberikan peningkatan kinerja 15-30x yang konsisten
Semua jenis kueri mendapatkan manfaat dari JSON Shredding tanpa regresi kinerja
PERTANYAAN UMUM
Bagaimana cara memverifikasi apakah penghancuran JSON berfungsi dengan baik?
Pertama, periksa apakah data telah dibuat dengan menggunakan perintah
show segment --format tabledi alat Birdwatcher. Jika berhasil, output akan berisishredding_data/danshared_key_index/di bawah bidang Json Key Stats.
Keluaran Birdwatcher Selanjutnya, verifikasi bahwa data telah dimuat dengan menjalankan
show loaded-json-statspada node kueri. Keluaran akan menampilkan rincian tentang data yang telah dimuat untuk setiap node kueri.
Bagaimana jika saya menemukan kesalahan?
Jika proses build atau pemuatan gagal, Anda dapat dengan cepat menonaktifkan fitur tersebut dengan mengatur
common.enabledJSONShredding=false. Untuk menghapus tugas yang tersisa, gunakan perintahremove stats-task <task_id>di Birdwatcher. Jika kueri gagal, aturcommon.usingjsonShreddingForQuery=falseuntuk kembali ke jalur kueri asli, melewati data yang diparut.Bagaimana cara memilih antara penghancuran JSON dan pengindeksan JSON?
Penghancuran JSON ideal untuk kunci yang sering muncul dalam dokumen Anda, terutama untuk struktur JSON yang kompleks. Proses ini menggabungkan manfaat penyimpanan kolumnar dan pengindeksan terbalik, sehingga sangat cocok untuk skenario pembacaan yang berat di mana Anda melakukan kueri terhadap banyak kunci yang berbeda. Namun, ini tidak disarankan untuk dokumen JSON yang sangat kecil karena peningkatan kinerjanya minimal. Semakin kecil proporsi nilai kunci terhadap ukuran total dokumen JSON, semakin baik pengoptimalan kinerja dari penghancuran.
Pengindeksan JSON lebih baik untuk pengoptimalan yang ditargetkan untuk kueri berbasis kunci tertentu dan memiliki overhead penyimpanan yang lebih rendah. Ini cocok untuk struktur JSON yang lebih sederhana. Perhatikan bahwa penghancuran JSON tidak mencakup kueri pada kunci di dalam larik, jadi Anda memerlukan indeks JSON untuk mempercepatnya.
Untuk detailnya, lihat Ikhtisar Bidang JSON.