Penghancuran JSON di Milvus: Pemfilteran JSON 88,9x Lebih Cepat dengan Fleksibilitas
Sistem AI modern menghasilkan lebih banyak data JSON semi-terstruktur daripada sebelumnya. Informasi pelanggan dan produk dipadatkan ke objek JSON, layanan mikro memancarkan log JSON pada setiap permintaan, perangkat IoT mengalirkan pembacaan sensor dalam muatan JSON yang ringan, dan aplikasi AI saat ini semakin terstandardisasi pada JSON untuk keluaran terstruktur. Hasilnya adalah banjir data seperti JSON yang mengalir ke dalam basis data vektor.
Secara tradisional, ada dua cara untuk menangani dokumen JSON:
Menentukan setiap bidang JSON ke dalam skema tetap dan membangun indeks: Pendekatan ini memberikan kinerja kueri yang solid, tetapi kaku. Setelah format data berubah, setiap bidang yang baru atau dimodifikasi akan memicu pembaruan Data Definition Language (DDL) dan migrasi skema yang menyakitkan.
Menyimpan seluruh objek JSON sebagai satu kolom (baik tipe JSON maupun Skema Dinamis di Milvus menggunakan pendekatan ini): Opsi ini menawarkan fleksibilitas yang sangat baik, tetapi dengan mengorbankan kinerja kueri. Setiap permintaan membutuhkan penguraian JSON pada saat runtime dan sering kali pemindaian tabel secara penuh, yang menghasilkan latensi yang meningkat seiring dengan bertambahnya kumpulan data.
Dulu ini merupakan dilema antara fleksibilitas dan kinerja.
Tidak lagi dengan fitur JSON Shredding yang baru diperkenalkan di Milvus.
Dengan diperkenalkannya JSON Shredding, Milvus sekarang mencapai kelincahan bebas skema dengan kinerja penyimpanan kolumnar, yang pada akhirnya membuat data semi-terstruktur berskala besar menjadi fleksibel dan ramah terhadap kueri.
Cara Kerja Penghancuran JSON
Penghancuran JSON mempercepat kueri JSON dengan mengubah dokumen JSON berbasis baris menjadi penyimpanan kolumnar yang sangat dioptimalkan. Milvus mempertahankan fleksibilitas JSON untuk pemodelan data sambil secara otomatis mengoptimalkan penyimpanan kolumnar-secara signifikan meningkatkan akses data dan kinerja kueri.
Untuk menangani bidang JSON yang jarang atau langka secara efisien, Milvus juga memiliki indeks terbalik untuk kunci bersama. Semua ini terjadi secara transparan kepada pengguna: Anda dapat memasukkan dokumen JSON seperti biasa, dan menyerahkannya kepada Milvus untuk mengelola strategi penyimpanan dan pengindeksan yang optimal secara internal.
Ketika Milvus menerima catatan JSON mentah dengan berbagai bentuk dan struktur, Milvus menganalisis setiap kunci JSON untuk rasio kemunculan dan stabilitas jenisnya (apakah jenis datanya konsisten di seluruh dokumen). Berdasarkan analisis ini, setiap kunci diklasifikasikan ke dalam salah satu dari tiga kategori:
Kunci yang diketik: Kunci yang muncul 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).
Kunci bersama: Kunci yang jarang muncul, jarang, atau bersarang, berada di bawah ambang batas frekuensi yang dapat dikonfigurasi.
Milvus menangani setiap kategori secara berbeda untuk memaksimalkan efisiensi:
Tombol yang diketik disimpan dalam kolom khusus yang diketik dengan kuat.
Kunci dinamis ditempatkan ke dalam kolom dinamis berdasarkan jenis nilai aktual yang diamati pada saat runtime.
Baik kolom yang diketik maupun kolom dinamis disimpan dalam format kolom Panah/Partikel untuk pemindaian cepat dan eksekusi kueri yang sangat dioptimalkan.
Kunci bersama dikonsolidasikan ke dalam kolom biner-JSON yang ringkas, disertai dengan indeks terbalik kunci bersama. Indeks ini mempercepat kueri pada bidang berfrekuensi rendah dengan memangkas baris yang tidak relevan lebih awal dan membatasi pencarian hanya pada dokumen yang berisi kunci yang ditanyakan.
Kombinasi penyimpanan kolumnar adaptif dan pengindeksan terbalik ini merupakan inti dari mekanisme penghancuran JSON Milvus, yang memungkinkan fleksibilitas dan kinerja tinggi dalam skala besar.
Alur kerja keseluruhan diilustrasikan di bawah ini:
Sekarang setelah kita membahas dasar-dasar cara kerja penghancuran JSON, mari kita lihat lebih dekat kemampuan utama yang membuat pendekatan ini fleksibel dan berkinerja tinggi.
Penghancuran dan Kolomisasi
Ketika sebuah dokumen JSON baru ditulis, Milvus memecahnya dan mengaturnya kembali ke dalam penyimpanan kolom yang dioptimalkan:
Kunci yang diketik dan dinamis secara otomatis diidentifikasi dan disimpan dalam kolom khusus.
Jika JSON berisi objek bersarang, Milvus menghasilkan nama kolom berbasis jalur secara otomatis. Sebagai contoh, kolom
namedi dalam objekuserdapat disimpan dengan nama kolom/user/name.Kunci yang digunakan bersama disimpan bersama dalam satu kolom JSON biner yang ringkas. Karena kunci-kunci ini jarang muncul, Milvus membuat indeks terbalik untuk kunci-kunci tersebut, sehingga memungkinkan pemfilteran yang cepat dan memungkinkan sistem untuk dengan cepat menemukan baris yang berisi kunci yang ditentukan.
Manajemen Kolom Cerdas
Selain merobek-robek JSON menjadi kolom-kolom, Milvus menambahkan lapisan kecerdasan tambahan melalui manajemen kolom yang dinamis, memastikan bahwa penghancuran JSON tetap fleksibel seiring perkembangan data.
Kolom dibuat sesuai kebutuhan: Ketika kunci baru muncul dalam dokumen JSON yang masuk, Milvus secara otomatis mengelompokkan nilai dengan kunci yang sama ke dalam kolom khusus. Hal ini mempertahankan keunggulan kinerja penyimpanan kolom tanpa mengharuskan pengguna merancang skema di awal. Milvus juga menyimpulkan tipe data dari kolom baru (misalnya, INTEGER, DOUBLE, VARCHAR) dan memilih format kolom yang efisien untuk kolom tersebut.
Setiap kunci ditangani secara otomatis: Milvus menganalisis dan memproses setiap kunci dalam dokumen JSON. Hal ini memastikan cakupan kueri yang luas tanpa memaksa pengguna untuk menentukan bidang atau membangun indeks terlebih dahulu.
Pengoptimalan Kueri
Setelah data disusun ulang ke dalam kolom yang tepat, Milvus memilih jalur eksekusi yang paling efisien untuk setiap kueri:
Pemindaian kolom langsung untuk kunci yang diketik dan kunci dinamis: Jika kueri menargetkan bidang yang telah dipecah menjadi kolom tersendiri, Milvus dapat memindai kolom tersebut secara langsung. Hal ini mengurangi jumlah total data yang perlu diproses dan memanfaatkan komputasi kolom yang dipercepat oleh SIMD untuk eksekusi yang lebih cepat.
Pencarian terindeks untuk kunci bersama: Jika kueri melibatkan kolom yang tidak dipromosikan ke dalam kolomnya sendiri-biasanya merupakan kunci yang langka-Milvus mengevaluasinya terhadap kolom kunci bersama. Indeks terbalik yang dibangun di atas kolom ini memungkinkan Milvus dengan cepat mengidentifikasi baris mana yang berisi kunci yang ditentukan dan melewatkan sisanya, sehingga secara signifikan meningkatkan kinerja untuk bidang-bidang yang berfrekuensi rendah.
Manajemen metadata otomatis: Milvus secara terus menerus mengelola metadata dan kamus global sehingga kueri tetap akurat dan efisien, bahkan ketika struktur dokumen JSON yang masuk berevolusi dari waktu ke waktu.
Tolok ukur kinerja
Kami merancang tolok ukur untuk membandingkan performa kueri dalam menyimpan seluruh dokumen JSON sebagai satu field mentah dibandingkan dengan menggunakan fitur JSON Shredding yang baru saja dirilis.
Lingkungan dan metodologi pengujian
Perangkat keras: 1 inti / 8GB cluster
Dataset: 1 juta dokumen dari JSONBench
Metodologi: Mengukur QPS dan latensi di berbagai pola kueri yang berbeda
Hasil: kunci yang diketik
Pengujian ini mengukur performa saat meng-query kunci yang ada di sebagian besar dokumen.
| Ekspresi Kueri | QPS (tanpa penghancuran) | QPS (dengan penghancuran) | Peningkatan Kinerja |
|---|---|---|---|
| json['time_us'] > 0 | 8.69 | 287.5 | 33x |
| json['jenis'] == 'komit' | 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 | QPS (tanpa penghancuran) | QPS (dengan penghancuran) | Peningkatan Kinerja |
|---|---|---|---|
| json['identitas']['seq'] > 0 | 4.33 | 385 | 88.9x |
| json['identity']['did'] == 'xxxxx' | 7.6 | 352 | 46.3x |
Kueri shared-key menunjukkan peningkatan yang paling dramatis (hingga 89x lebih cepat), sementara kueri typed-key memberikan peningkatan kecepatan 15-30x secara konsisten. Secara keseluruhan, setiap jenis kueri mendapatkan manfaat dari JSON Shredding, dengan peningkatan kinerja yang jelas di seluruh bagian.
Coba Sekarang
Baik Anda bekerja dengan log API, data sensor IoT, atau muatan aplikasi yang berkembang pesat, JSON Shredding memberi Anda kemampuan langka untuk memiliki fleksibilitas dan kinerja tinggi.
Fitur ini sekarang sudah tersedia dan silakan mencobanya sekarang. Anda juga dapat melihat dokumen ini untuk informasi lebih lanjut.
Ada pertanyaan atau ingin mendalami fitur-fitur Milvus terbaru? Bergabunglah dengan saluran Discord kami atau ajukan pertanyaan di GitHub. Anda juga dapat memesan sesi tatap muka selama 20 menit untuk mendapatkan wawasan, panduan, dan jawaban atas pertanyaan Anda melalui Milvus Office Hours.
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



