全部产品
Search
文档中心

PolarDB:In-Memory Column Index (IMCI)

更新时间:Dec 17, 2025

Topik ini menjelaskan fitur In-Memory Column Index (IMCI) dari PolarDB for PostgreSQL, yang dirancang untuk mempercepat kueri kompleks.

Pendahuluan

Fitur In-Memory Column Index (IMCI) dari PolarDB for PostgreSQL memungkinkan Anda menangani pemrosesan transaksional online berkonkurensi tinggi (OLTP) dan analitik data kompleks (OLAP) dalam satu sistem. Anda tidak perlu lagi memelihara sistem eksternal terpisah yang mahal dan berarsitektur kompleks untuk kueri analitik. Hal ini menyederhanakan arsitektur data, mengurangi biaya operasi dan pemeliharaan (O&M), serta memungkinkan analisis real-time terhadap data bisnis skala besar.

Dibandingkan dengan mesin penyimpanan baris (row store engine), IMCI meningkatkan performa kueri di dua area utama: indeks penyimpanan kolom (columnstore indexes) pada lapisan penyimpanan dan operator vektorisasi pada lapisan mesin eksekusi—juga dikenal sebagai mesin eksekusi vektorisasi. Peningkatan ini mengatasi keterbatasan mesin penyimpanan baris dalam menangani kueri kompleks. Sebagai contoh, dalam pengujian performa TPC-H menggunakan dataset 100 GB pada kluster 32-core dan 256 GB, mesin penyimpanan kolom dari PolarDB for PostgreSQL memberikan performa kueri lebih dari 60 kali lipat dibandingkan mesin penyimpanan baris. Untuk informasi selengkapnya, lihat hasil pengujian performa IMCI.

Cara kerja

Optimisasi arsitektur

Fitur IMCI dari PolarDB for PostgreSQL mengoptimalkan lapisan mesin eksekusi dan penyimpanan untuk meningkatkan pemrosesan kueri kompleks.

  • Lapisan mesin eksekusi

    • Berbeda dengan mesin penyimpanan baris, mesin eksekusi vektorisasi menggunakan instruksi SIMD CPU untuk memproses data secara batch. Satu instruksi CPU dapat memproses beberapa entri data secara paralel, sehingga mengurangi overhead pemanggilan fungsi dan cache miss.

    • Mesin ini menerapkan operator yang sepenuhnya divectorisasi. Misalnya, operator seperti Scan, Group By, Order By, Hash Join, Filter, Count, dan Sum divectorisasi. Hal ini memungkinkan mesin menerima input data batch dan memprosesnya menggunakan instruksi SIMD.

  • Lapisan penyimpanan

    • Menggunakan format penyimpanan kolom yang lebih sesuai untuk operator vektorisasi dibandingkan struktur heap penyimpanan baris.

    • Format penyimpanan kolom diimplementasikan sebagai indeks, yaitu In-Memory Column Index (IMCI). IMCI mirip dengan indeks Pohon-B (B-tree) dan GiST, tetapi berbeda dalam struktur penyimpanan dan skenario penerapannya. Mesin eksekusi vektorisasi dapat langsung menggunakan IMCI, sedangkan mesin penyimpanan baris menggunakan indeks Pohon-B dan GiST. Sebuah tabel dapat berisi IMCI sekaligus jenis indeks lainnya untuk menangani kueri yang berbeda. Pengoptimal PolarDB for PostgreSQL memilih indeks yang sesuai berdasarkan biaya rencana kueri.

Seperti ditunjukkan pada gambar berikut, Anda dapat membuat indeks Pohon-B pada kolom c2 tabel t untuk kueri titik (SELECT * FROM t WHERE c2=10) dan IMCI pada kolom c4 dan c5 untuk kueri statistik (SELECT c4,  SUM(c5) FROM t GROUP BY c4). Pengoptimal kueri menentukan indeks paling efisien berdasarkan biaya pernyataan SQL.

image

Sinkronisasi data baris-kolom real-time

Data dalam IMCI disimpan dalam format kolom di database. Data pertama kali ditulis ke tabel berorientasi baris, lalu disinkronkan ke IMCI melalui mekanisme pengindeksan. Proses ini disebut sinkronisasi data baris-kolom. Fitur IMCI dari PolarDB for PostgreSQL menyediakan mekanisme sinkronisasi baris-kolom yang efisien, real-time, dan otomatis. Anda tidak perlu membangun pipeline tambahan atau melakukan refresh manual terhadap data penyimpanan kolom.

Mekanisme sinkronisasi baris-kolom mengurai log Write-Ahead Logging (WAL) untuk mengambil data yang dimodifikasi, lalu menuliskannya ke IMCI secara asinkron. Dampak proses ini terhadap performa dan beban penyimpanan baris sangat minimal, biasanya kurang dari 3%. Karena IMCI dari PolarDB for PostgreSQL dapat berkoeksistensi dengan mesin penyimpanan baris pada node yang sama, proses penguraian log WAL sangat dioptimalkan. Meskipun proses konversi baris-ke-kolom bersifat asinkron, sinkronisasi mencapai tingkat near real-time dengan latensi beberapa milidetik hingga beberapa detik, tergantung pada beban penulisan. Untuk informasi selengkapnya tentang mengoptimalkan performa sinkronisasi baris-kolom, lihat Tingkatkan performa real-time IMCI.

Bentuk produk

Fitur IMCI dari PolarDB for PostgreSQL diterapkan pada semua node. Oleh karena itu, semua node komputasi dalam sebuah kluster memiliki mesin penyimpanan baris sekaligus IMCI. Dalam mode ini, dua keputusan diambil saat pernyataan SQL dieksekusi:

  1. Pemilihan node komputasi untuk mengeksekusi pernyataan tersebut.

  2. Pemilihan mesin eksekusi di dalam node tersebut.

Pilih node komputasi

Ketika kluster PolarDB memiliki beberapa node, sistem harus menentukan node komputasi mana yang mengeksekusi pernyataan SQL terkait IMCI.

  • Semua pernyataan modifikasi data, seperti pernyataan DDL dan DML, dieksekusi pada Node RW. Node RW kemudian memilih mesin eksekusi yang sesuai berdasarkan kondisi tertentu.

  • Pembuatan IMCI dan sinkronisasi data real-time dilakukan pada Node RW.

  • Untuk semua pernyataan SQL read-only, Anda dapat mengonfigurasi proksi database untuk menentukan node mana yang digunakan untuk eksekusi.

Pilih mesin eksekusi

Pada node komputasi, mesin eksekusi dipilih untuk mengeksekusi pernyataan tersebut.

  • Untuk pernyataan DDL, seperti CREATE TABLE dan ALTER TABLE, umumnya digunakan mesin penyimpanan baris. Namun, untuk pernyataan CREATE TABLE AS SELECT, sistem menentukan apakah akan menggunakan IMCI berdasarkan kompleksitas subkueri SELECT.

  • Untuk pernyataan DML, seperti INSERT, UPDATE, dan DELETE, digunakan mesin penyimpanan baris.

  • Untuk pernyataan DQL, seperti pernyataan SELECT, sistem menentukan apakah akan menggunakan IMCI berdasarkan biaya kueri dan parameter. Secara umum, semakin tinggi biaya kueri SELECT, semakin besar kemungkinan IMCI digunakan. Jika IMCI gagal mengeksekusi pernyataan SELECT, sistem akan fallback ke mesin penyimpanan baris untuk eksekusi.

image

Fitur utama

  • Performa tinggi

    Dibandingkan dengan mesin penyimpanan baris, IMCI meningkatkan performa kueri SQL hingga satu orde besaran. Untuk kueri kompleks, peningkatan performa mencapai lebih dari 100 kali lipat.

  • Hemat biaya

    • Anda hanya perlu membuat IMCI untuk kolom yang terlibat dalam kueri. Tidak perlu mengonversi seluruh tabel menjadi penyimpanan kolom.

    • IMCI menggunakan ruang penyimpanan lebih sedikit. Untuk kolom yang sama, IMCI hanya menggunakan 10% hingga 50% dari ruang penyimpanan yang digunakan oleh penyimpanan baris, tergantung pada tipe data.

  • Mudah digunakan

    Penggunaannya identik dengan PostgreSQL native.

    • IMCI mewarisi metode manajemen indeks PostgreSQL native dan mendukung sintaks seperti CREATE INDEX dan DROP INDEX. Tidak diperlukan sintaks tambahan. Untuk informasi selengkapnya, lihat Aktifkan dan gunakan IMCI.

    • IMCI sangat kompatibel dengan tipe data dan sintaks PostgreSQL. Anda tidak perlu memodifikasi pernyataan SQL yang ada untuk menggunakan IMCI.

    • Anda dapat menggunakan pengaturan parameter untuk kontrol detail halus terhadap pernyataan SQL mana yang menggunakan IMCI. Ini mencakup penggunaan global, penggunaan level sesi, dan menentukan penggunaan IMCI untuk pernyataan SQL tertentu menggunakan petunjuk (hints). Untuk informasi selengkapnya, lihat Aktifkan dan gunakan IMCI.

  • Pemeliharaan IMCI Real-Time

    • Konsistensi antara data penyimpanan baris dan IMCI dipertahankan secara otomatis. Anda tidak perlu membangun pipeline konversi data tambahan atau melakukan operasi refresh dan sinkronisasi manual.

    • Data baru yang dimasukkan ke penyimpanan baris disinkronkan ke IMCI dalam hitungan milidetik atau detik. Anda dapat menyesuaikan performa sinkronisasi berdasarkan beban bisnis yang berbeda. Untuk informasi selengkapnya, lihat Aktifkan dan gunakan IMCI.

  • Konsistensi

    Disediakan dua tingkat konsistensi untuk data penyimpanan kolom dan penyimpanan baris guna memenuhi kebutuhan bisnis yang berbeda.

    • Konsistensi eventual (default): Cocok untuk kueri dengan beban penulisan tinggi tetapi persyaratan real-time data yang tidak terlalu ketat.

    • Konsistensi kuat: Mengembalikan hasil kueri hanya setelah data penyimpanan kolom sepenuhnya konsisten dengan data penyimpanan baris. Untuk informasi selengkapnya, lihat Aktifkan dan gunakan IMCI.

  • Kompatibilitas dengan berbagai metode penggunaan

    • Mendukung sintaks Prepared Statement.

    • Mendukung akselerasi pernyataan SELECT dalam blok transaksi.

      Catatan

      Pernyataan SELECT harus merupakan pernyataan SQL 'read-before-write' di dalam blok transaksi.

    • Mendukung tabel partisi dan tabel partisi yang dikelola oleh pg_pathman. Pemangkasan partisi (partition pruning) juga didukung. Untuk informasi selengkapnya, lihat Gunakan IMCI untuk tabel partisi.

    • Mendukung akselerasi kueri multi-modal spatio-temporal.

Skenario

Fitur IMCI dari PolarDB for PostgreSQL menyediakan pengalaman pemrosesan transaksional dan analitik hibrida (HTAP) terpadu dan dapat digunakan dalam berbagai skenario bisnis:

  • Skema HTAP: Misalnya, Anda perlu melakukan banyak operasi CRUD pada data transaksi setiap hari sekaligus menghasilkan laporan statistik real-time untuk jam terakhir. IMCI dari PolarDB for PostgreSQL tidak hanya menangani kedua jenis beban kerja tersebut secara efisien, tetapi juga menyederhanakan arsitektur sistem. Anda tidak perlu memelihara sistem tambahan untuk kueri OLAP statistik real-time.

  • Berbagai jenis pernyataan SQL lambat: Termasuk pernyataan dalam skenario transaksi berkonkurensi tinggi, seperti:

    • Agregasi seluruh tabel, seperti operasi COUNT, SUM, dan AVERAGE.

    • Operasi GROUP BY dan ORDER BY pada kolom.

    • Operasi JOIN pada beberapa tabel.

    • Kueri yang melakukan filter pada banyak kolom dalam urutan tak terduga. Dalam kasus ini, indeks komposit tidak fleksibel dan mudah menjadi tidak efektif. Menggunakan IMCI merupakan pilihan yang lebih baik.

  • Kueri multi-modal dan spatio-temporal: Ekstrak KEY dan VALUE dari JSON bersarang atau hasilkan heatmap spatio-temporal berdasarkan grid geografis.

  • Skema akselerasi data ETL: Anda dapat menggunakan SQL di PolarDB untuk mengimplementasikan fungsi ETL, memanfaatkan kemampuan komputasi yang kuat dan fleksibel yang disediakan PolarDB berdasarkan IMCI.

Penagihan

IMCI dapat dieksekusi langsung pada node penyimpanan baris atau pada node read-only IMCI tambahan.

  • Menggunakan IMCI pada node penyimpanan baris: Gratis.

  • Menambahkan node read-only IMCI: Opsi ini dikenai biaya node. Node read-only IMCI ditagih sebagai node komputasi standar. Selain itu, IMCI menempati storage space, yang dikenai biaya storage space yang sesuai.

Catatan

Menggunakan fitur IMCI langsung pada node penyimpanan baris dapat memengaruhi bisnis Anda. Setelah Anda menambahkan node read-only IMCI, Anda dapat mengisolasi beban kerja pemrosesan transaksional (TP) dan pemrosesan analitik (AP) pada node yang berbeda. Hal ini memastikan keduanya tidak saling memengaruhi. Untuk informasi selengkapnya, lihat dampak bisnis.