Milvus
Zilliz
Beranda
  • Panduan Pengguna
  • Home
  • Docs
  • Panduan Pengguna

  • Optimalisasi Penyimpanan

  • Penyimpanan Berjenjang

  • Ikhtisar Penyimpanan Berjenjang

Gambaran Umum Penyimpanan BerjenjangCompatible with Milvus 2.6.4+

Di Milvus, mode beban penuh tradisional mengharuskan setiap QueryNode untuk memuat semua bidang data dan indeks segmen saat inisialisasi, bahkan data yang mungkin tidak pernah diakses. Hal ini memastikan ketersediaan data dengan segera, tetapi sering kali menyebabkan pemborosan sumber daya, termasuk penggunaan memori yang tinggi, aktivitas disk yang berat, dan overhead I/O yang signifikan, terutama saat menangani dataset berskala besar.

Tiered Storage menjawab tantangan ini dengan memisahkan cache data dari pemuatan segmen. Alih-alih memuat semua data sekaligus, Milvus memperkenalkan lapisan caching yang membedakan antara data panas (di-cache secara lokal) dan data dingin (disimpan secara remote). QueryNode sekarang hanya memuat metadata ringan pada awalnya dan secara dinamis menarik atau mengeluarkan data lapangan sesuai permintaan. Hal ini secara signifikan mengurangi waktu muat, mengoptimalkan pemanfaatan sumber daya lokal, dan memungkinkan QueryNode untuk memproses dataset yang jauh melebihi kapasitas memori fisik atau disk.

Pertimbangkan untuk mengaktifkan Penyimpanan Berjenjang dalam skenario seperti:

  • Koleksi yang melebihi memori yang tersedia atau kapasitas NVMe dari satu QueryNode

  • Beban kerja analitis atau batch di mana pemuatan yang lebih cepat lebih penting daripada latensi kueri pertama

  • Beban kerja campuran yang dapat mentoleransi kesalahan cache sesekali untuk data yang lebih jarang diakses

  • Metadata mencakup skema, definisi indeks, peta potongan, jumlah baris, dan referensi ke objek jarak jauh. Jenis data ini berukuran kecil, selalu di-cache, dan tidak pernah digusur.

  • Untuk detail lebih lanjut tentang segmen dan potongan, lihat Segmen.

Bagaimana cara kerjanya

Penyimpanan Berjenjang mengubah cara QueryNode mengelola data segmen. Alih-alih menyimpan cache setiap bidang dan indeks pada saat pemuatan, QueryNode kini hanya memuat metadata dan menggunakan lapisan cache untuk mengambil dan mengeluarkan data secara dinamis.

Mode beban penuh vs mode Penyimpanan Berjenjang

Meskipun mode full-load dan Tiered Storage menangani data yang sama, keduanya berbeda dalam hal kapan dan bagaimana QueryNode menyimpan komponen-komponen ini di dalam cache.

  • Mode beban penuh: Pada saat pemuatan, QueryNode menyimpan data koleksi penuh, termasuk metadata, data bidang, dan indeks, dari penyimpanan objek.

  • Mode Penyimpanan Berjenjang: Pada waktu pemuatan, QueryNode hanya menyimpan metadata. Data bidang ditarik sesuai permintaan pada granularitas potongan. File indeks tetap berada di luar jangkauan hingga kueri pertama membutuhkannya; kemudian seluruh indeks per segmen diambil dan di-cache.

Diagram di bawah ini menunjukkan perbedaan ini.

Full Load Mode Vs Tiered Storage Mode Mode Pemuatan Penuh Vs Mode Penyimpanan Berjenjang

Alur kerja pemuatan QueryNode

Dalam Penyimpanan Berjenjang, alur kerja memiliki fase-fase berikut:

Querynode Load Workflow Alur Kerja Pemuatan Querynode

Fase 1: Beban malas

Saat inisialisasi, Milvus melakukan lazy load, hanya menyimpan metadata tingkat segmen seperti definisi skema, informasi indeks, dan pemetaan potongan.

Tidak ada data lapangan aktual atau file indeks yang di-cache pada tahap ini. Hal ini memungkinkan koleksi untuk dapat diakses segera setelah startup sambil menjaga konsumsi memori dan disk tetap minimal.

Karena data field dan file indeks tetap berada di penyimpanan jarak jauh hingga pertama kali diakses, query pertama mungkin mengalami latensi tambahan karena data yang diperlukan harus diambil sesuai permintaan. Untuk mengurangi efek ini untuk bidang atau indeks yang penting, Anda dapat menggunakan strategi Pemanasan untuk secara proaktif melakukan pramuat sebelum segmen tersebut dapat di-query.

Konfigurasi

Diterapkan secara otomatis ketika Penyimpanan Berjenjang diaktifkan. Tidak diperlukan pengaturan manual.

Fase 2: Pemanasan

Untuk mengurangi latensi serangan pertama yang disebabkan oleh beban malas, Milvus menyediakan mekanisme Pemanasan.

Sebelum sebuah segmen dapat di-query, Milvus dapat secara proaktif mengambil dan menyimpan field atau indeks tertentu dari penyimpanan objek, memastikan bahwa query pertama langsung menyentuh data yang di-cache alih-alih memicu pemuatan sesuai permintaan.

Selama pemanasan, field akan dimuat sebelumnya di tingkat chunk, sementara indeks akan dimuat sebelumnya di tingkat segmen.

Konfigurasi

Pengaturan Pemanasan ditentukan di bagian Penyimpanan Berjenjang di milvus.yaml. Anda dapat mengaktifkan atau menonaktifkan pramuat untuk setiap bidang atau jenis indeks dan menentukan strategi yang diinginkan. Lihat Pemanasan untuk konfigurasi terperinci.

Tahap 3: Pemuatan sebagian

Setelah kueri atau pencarian dimulai, QueryNode melakukan pemuatan parsial, hanya mengambil potongan data atau file indeks yang diperlukan dari penyimpanan objek.

  • Bidang: Dimuat sesuai permintaan pada tingkat potongan. Hanya potongan data yang sesuai dengan kondisi kueri saat ini yang diambil, sehingga meminimalkan penggunaan I/O dan memori.

  • Indeks: Dimuat sesuai permintaan pada tingkat segmen. File indeks harus diambil sebagai unit yang lengkap dan tidak dapat dipecah menjadi beberapa bagian.

Konfigurasi

Pemuatan sebagian secara otomatis diterapkan ketika Penyimpanan Berjenjang diaktifkan. Tidak diperlukan pengaturan manual. Untuk meminimalkan latensi yang pertama kali masuk untuk data penting, kombinasikan dengan Pemanasan.

Fase 4: Penggusuran

Untuk menjaga penggunaan sumber daya yang sehat, Milvus secara otomatis melepaskan data cache yang tidak terpakai ketika ambang batas tertentu tercapai.

Eviction mengikuti kebijakan Least Recently Used (LRU ), memastikan bahwa data yang jarang diakses akan dihapus terlebih dahulu sementara data yang aktif tetap berada di cache.

Penggusuran diatur oleh item yang dapat dikonfigurasi berikut ini:

  • Tanda air: Menetapkan ambang batas memori atau disk yang memicu dan menghentikan penggusuran.

  • Cache TTL: Menghapus data cache yang sudah basi setelah durasi tidak aktif yang ditentukan.

Konfigurasi

Mengaktifkan dan menyetel parameter penggusuran di milvus.yaml. Lihat Penggusuran untuk konfigurasi terperinci.

Memulai

Prasyarat

  • Milvus 2.6.4+

  • QueryNode dengan memori dan sumber daya disk khusus

  • Backend penyimpanan objek (S3, MinIO, dll.)

Sumber daya QueryNode tidak boleh digunakan bersama dengan beban kerja lain. Sumber daya yang digunakan bersama dapat menyebabkan Penyimpanan Berjenjang salah menilai kapasitas yang tersedia, sehingga menyebabkan kerusakan.

Templat konfigurasi dasar

Edit file konfigurasi Milvus (milvus.yaml) untuk mengonfigurasi pengaturan Penyimpanan Berjenjang:

# milvus.yaml
queryNode:
  segcore:
    tieredStorage:
      # Warm Up Configuration
      warmup:
        scalarField: sync      # Preload scalar field data
        scalarIndex: sync      # Preload scalar indexes
        vectorField: disable   # Don't preload vector field data (large)
        vectorIndex: sync      # Preload vector indexes
      
      # Eviction Configuration
      evictionEnabled: true
      backgroundEvictionEnabled: true
      
      # Memory Watermarks
      memoryLowWatermarkRatio: 0.75   # Stop evicting at 75%
      memoryHighWatermarkRatio: 0.80  # Start evicting at 80%
      
      # Disk Watermarks  
      diskLowWatermarkRatio: 0.75
      diskHighWatermarkRatio: 0.80
      
      # Cache TTL (7 days)
      cacheTtl: 604800

Langkah selanjutnya

  1. Konfigurasikan Pemanasan - Optimalkan pemuatan awal untuk pola akses Anda. Lihat Pemanasan.

  2. Tune Eviction - Atur tanda air dan TTL yang sesuai untuk batasan sumber daya Anda. Lihat Penggusuran.

  3. PantauPerforma - Melacak tingkat hit cache, frekuensi penggusuran, dan pola latensi kueri.

  4. Konfigurasi Iterasi - Menyesuaikan pengaturan berdasarkan karakteristik beban kerja yang diamati.

PERTANYAAN UMUM

Dapatkah saya mengubah parameter Penyimpanan Berjenjang pada saat runtime?

Tidak. Semua parameter harus diatur di milvus.yaml sebelum memulai Milvus. Perubahan memerlukan pengaktifan ulang agar dapat diterapkan.

Apakah Penyimpanan Berjenjang memengaruhi daya tahan data?

Tidak. Ketahanan data masih ditangani oleh penyimpanan objek jarak jauh. Penyimpanan Berjenjang hanya mengelola cache di QueryNode.

Apakah kueri akan selalu lebih cepat dengan Penyimpanan Berjenjang?

Belum tentu. Penyimpanan Berjenjang mengurangi waktu muat dan penggunaan sumber daya, tetapi kueri yang menyentuh data yang tidak di-cache (dingin) mungkin mengalami latensi yang lebih tinggi. Untuk beban kerja yang sensitif terhadap latensi, mode beban penuh direkomendasikan.

Mengapa QueryNode masih kehabisan sumber daya meskipun Penyimpanan Berjenjang diaktifkan?

Ada dua penyebab umum:

  • QueryNode dikonfigurasikan dengan sumber daya yang terlalu sedikit. Watermark relatif terhadap sumber daya yang tersedia, sehingga penyediaan yang kurang akan memperkuat kesalahan penilaian.

  • Sumber daya QueryNode digunakan bersama dengan beban kerja lain, sehingga Penyimpanan Berjenjang tidak dapat menilai kapasitas aktual yang tersedia dengan benar.

Untuk mengatasi hal ini, kami sarankan Anda mengalokasikan sumber daya khusus untuk QueryNode.

Mengapa beberapa kueri gagal dalam konkurensi tinggi?

Jika terlalu banyak kueri yang mengakses data panas pada saat yang sama, batas sumber daya QueryNode mungkin akan terlampaui. Beberapa thread mungkin gagal karena batas waktu pemesanan sumber daya. Mencoba kembali setelah beban berkurang, atau mengalokasikan lebih banyak sumber daya, dapat mengatasi hal ini.

Mengapa latensi pencarian/kueri meningkat setelah mengaktifkan Penyimpanan Berjenjang?

Kemungkinan penyebabnya meliputi:

  • Sering melakukan kueri ke data dingin, yang harus diambil dari penyimpanan.

  • Tanda air yang ditetapkan terlalu berdekatan, menyebabkan seringnya penggusuran sinkron.