Diskusi terbaru di komunitas developer telah menyoroti keterbatasan signifikan pada materialized views PostgreSQL , memicu perdebatan tentang kebutuhan akan pemeliharaan view incremental yang benar-benar otomatis dalam database. Percakapan ini berpusat pada kesenjangan antara apa yang diharapkan developer dari materialized views dan apa yang sebenarnya dapat diberikan oleh implementasi saat ini.
Masalah Manual Refresh PostgreSQL
Isu utama dengan materialized views PostgreSQL adalah bahwa mereka memerlukan refresh manual menggunakan perintah REFRESH MATERIALIZED VIEW
. Tidak seperti versi ideal yang dijelaskan dalam banyak tutorial, view ini tidak secara otomatis tetap tersinkronisasi dengan data dasarnya. Hal ini membuat mereka lebih seperti mekanisme caching yang canggih daripada solusi ajaib yang selalu up-to-date seperti yang diharapkan banyak developer.
Situasi menjadi lebih bermasalah ketika berhadapan dengan dataset besar. Merefresh materialized view di PostgreSQL memerlukan pembangunan ulang seluruh view, yang dapat menghabiskan banyak resource dan berpotensi mengganggu sistem produksi. Pendekatan all-or-nothing ini berarti Anda tidak dapat secara selektif memperbarui bagian-bagian dari view, yang mengarah pada potensi bottleneck performa.
Ekstensi PostgreSQL untuk Incremental Views
- pg_ivm: Ekstensi pihak ketiga yang menambahkan pemeliharaan incremental view ke PostgreSQL
- Tidak tersedia di Amazon RDS
- Menyediakan pembaruan otomatis tetapi memerlukan instalasi dan konfigurasi manual
Solusi Pihak Ketiga Mengisi Kekosongan
Beberapa perusahaan telah muncul untuk mengatasi keterbatasan ini, menawarkan kemampuan pemeliharaan view incremental yang sesungguhnya. Materialize , ReadySet , Feldera , RisingWave , dan DeltaStream adalah di antara startup yang menyediakan solusi yang dapat secara otomatis menjaga materialized views tetap tersinkronisasi dengan data sumbernya. Platform-platform ini menggunakan teknik seperti differential dataflow dan incremental view maintenance untuk mencapai apa yang sulit dilakukan oleh database tradisional.
Materialized views di ScyllaDB dikenal (atau dulu?) sebagai implementasi yang buggy. Secara khusus, mereka sering bergantung pada cluster yang sehat pada saat menyebarkan perubahan.
Perusahaan yang Menawarkan Incremental View Maintenance
- Materialize: Database streaming khusus dengan pembaruan view otomatis
- ReadySet: Lapisan caching SQL dengan maintenance incremental
- Feldera: Platform berbasis DBSP dengan kompleksitas pembaruan O(1)
- RisingWave: Database streaming untuk analitik real-time
- DeltaStream: Stream processing dengan materialized views
- Confluent: Platform streaming berbasis Kafka dengan kemampuan view
Vendor Database Mengejar Ketertinggalan
Sementara PostgreSQL tertinggal, sistem database lain menawarkan implementasi materialized views yang lebih baik. Microsoft SQL Server menyediakan indexed views yang update secara sinkron dengan tabel dasar, meskipun ini memiliki implikasi performa selama operasi write. Oracle menawarkan opsi rebuild penuh dan incremental, dengan versi terbaru menambahkan kemampuan concurrent refresh.
Penyedia cloud juga berkembang di bidang ini. Materialized views BigQuery memungkinkan tuning parameter freshness dan dapat secara otomatis menulis ulang query untuk menggunakan agregat yang telah dihitung sebelumnya. Namun, fitur-fitur canggih ini sering kali datang dengan pertimbangan vendor lock-in.
Perbandingan Database untuk Materialized Views
Database | Auto-Update | Incremental Refresh | Production Ready |
---|---|---|---|
PostgreSQL | Tidak | Hanya ekstensi | Ya |
MySQL | Tidak | Tidak | Ya |
SQL Server | Ya (Indexed Views) | Ya | Ya |
Oracle | Opsional | Ya | Ya |
BigQuery | Ya | Ya | Ya |
ScyllaDB | Ya (bermasalah) | Ya | Terbatas |
Trade-off Performa vs. Kompleksitas
Diskusi ini mengungkapkan ketegangan fundamental dalam desain database. Query counting sederhana yang bekerja dengan sempurna dengan indexing yang tepat sering kali di-over-engineer menjadi solusi caching yang kompleks. Banyak developer menunjukkan bahwa untuk use case tipikal yang melibatkan ribuan daripada jutaan record, query COUNT(*)
yang well-indexed berkinerja memadai tanpa kompleksitas materialized views.
Nilai sebenarnya dari materialized views muncul dengan query analitik yang lebih kompleks yang melibatkan multiple joins, agregasi, dan transformasi. Skenario ini mendapat manfaat signifikan dari hasil yang telah dihitung sebelumnya, terutama dalam aplikasi data warehousing dan reporting.
Pengembangan yang sedang berlangsung di bidang ini menunjukkan bahwa automatic incremental view maintenance kemungkinan akan menjadi fitur standar dalam sistem database masa depan. Sampai saat itu, developer harus dengan hati-hati mempertimbangkan trade-off antara performa query, freshness data, dan kompleksitas sistem ketika memilih pendekatan mereka untuk manajemen derived data.
Referensi: Materialized views are obviously useful