Bagaimana Dan Mengapa Materialize Kompatibel Dengan PostgreSQL?

Bagaimana Dan Mengapa Materialize Kompatibel Dengan PostgreSQL? – Kami sering mengatakan Materialize “disajikan sebagai Postgres” atau “kompatibel dengan kabel Postgres” dan (dapat dimengerti) terkadang kami ditanya apa artinya itu.

Bagaimana Dan Mengapa Materialize Kompatibel Dengan PostgreSQL?

pgsql – Tidak ada kriteria resmi untuk kompatibilitas Postgres, tetapi cenderung mengambil salah satu dari dua rute: Beberapa database cloud baru seperti Neon dan AlloyDB berusaha untuk menyediakan fungsionalitas dan fitur PostgreSQL yang sama persis dan mengklaim kompatibilitas penuh PostgreSQL. Basis data lain (termasuk Materialize) terutama ingin membuat sistem mereka lebih akrab dan dapat digunakan, dan mendapatkan koneksi ke ekosistem perkakas yang sudah ditulis untuk Postgres, ini cenderung menggunakan istilah: Postgres wire-compatible.

Ada banyak area abu-abu di kompatibilitas kabel Postgres, jadi untuk menjernihkannya, kita akan membicarakan detail Kompatibilitas Materialize Postgres dalam dua bagian:

  1. Materialize kompatibel dengan kabel PostgreSQL
  2. Materialize bertujuan untuk konsistensi SQL dengan PostgreSQL

1. Kompatibilitas kabel PostgreSQL

Materialize berbicara tentang protokol kawat Postgres. Anda tidak memerlukan driver atau SDK khusus untuk bekerja dengan Materialize, cukup gunakan driver Postgres! Setiap database membutuhkan protokol untuk standarisasi komunikasi dengan dunia luar. PostgreSQL telah melakukan pekerjaan yang baik dalam mengimplementasikan dan mendokumentasikan Protokol Jaringan Frontend/Backend Postgres sendiri.

Keterbukaan protokolnya, dan popularitas Postgres itu sendiri, menyebabkan ekosistem driver, pustaka klien, dan alat yang berkembang pesat yang dapat mengelola, menulis, dan membaca dari database PostgreSQL. Ekosistem integrasi itu sendiri sekarang bertindak sebagai insentif yang kuat bagi database baru untuk mengadopsi protokol kawat Postgres.

Baca Juga : PostgreSQL 15 Menyederhanakan Manajemen Beban Kerja, Meningkatkan Kinerja

Materialize memiliki protokol input/output data non-Postgres lainnya seperti Sources dan Sink, tetapi semua manajemen dan semua kueri terjadi melalui protokol kawat Postgres. Hampir semua perangkat lunak yang terintegrasi dengan PostgreSQL dapat diarahkan ke Materialize dan akan mengetahui cara menulis, membaca, dan mengelola data tanpa modifikasi atau kode khusus. Secara egois, ini juga berarti Materialize tidak harus memelihara pustaka dan driver klien. Cukup gunakan yang PostgreSQL, mereka sudah bertahun-tahun menggunakan produksi dunia nyata.

Manfaat

Dengan menghadirkan sebagai PostgreSQL, Materialize mendapatkan sejumlah besar integrasi yang matang dan terpelihara dengan baik di luar kotak.

  • Setiap bahasa memiliki driver yang sudah ada yang bekerja dengan baik dengan Materialize, banyak kerangka kerja yang terintegrasi juga.
  • Alat dan IDE Manajemen DB terintegrasi dengan Materialize
  • Alat Intelijen Bisnis seperti Metabase, Tableau, dan Looker
  • Alat SaaS Data Baru seperti Hex, Cube.js memperluas apa yang dapat Anda bangun dengan Materialize.

Keterbatasan

Beberapa alat seperti ORM mengirimkan kueri konfigurasi atau introspeksi di balik layar ketika mereka diberitahu bahwa mereka terhubung ke Postgres. Ini sering merupakan pertanyaan ke pg_catalog. Materialize belum mengimplementasikan seluruh fitur pg_catalog, jadi alat tertentu yang mengandalkan ini akan gagal. Status integrasi yang paling sering diminta dilacak di sini. Jika integrasi yang Anda butuhkan tidak tercantum pada halaman, ajukan permintaan fitur, dan kami akan menindaklanjutinya.

2. Konsistensi sintaksis PostgreSQL

Materialize menggunakan implementasi SQL standar ANSI (ANSI 92) yang mirip dengan banyak database SQL lainnya. Lebih khusus lagi, Materialize bertujuan untuk konsistensi dengan PostgreSQL.

Sintaks Umum antara Materialize dan PostgreSQL

Materialize memiliki cakupan substansial dari fungsi PostgreSQL, operator dan tipe data, untuk sintaks SQL bersama ini, alasan kami adalah:

SQL valid yang sama, ketika diberikan input valid yang sama, akan menghasilkan output yang sama di Materialize dan PostgreSQL.

Prinsip ini berguna untuk meningkatkan portabilitas UX dan SQL, tetapi juga membantu kami dalam pengujian. Kami menggunakan beberapa pendekatan pengujian otomatis, termasuk satu (pgtest) yang menggunakan Postgres sebagai “oracle tepercaya” dan memeriksa apakah input dan SQL yang sama menghasilkan output yang sama antara PostgreSQL dan Materialize.

Ada beberapa contoh di mana perbedaan mendasar dalam engine (Differential Dataflow) yang menghidupkan Materialize menghasilkan perbedaan halus pada lapisan SQL, misalnya: semua tipe numerik di Materialize memiliki presisi 39. Namun secara keseluruhan, kami berkomitmen untuk memastikan tidak ada Postgres-Materialize perbedaan SQL yang secara material menurunkan kegunaan sistem.

Sintaks PostgreSQL tidak diimplementasikan di Materialize

Beberapa bagian dari PostgreSQL kemungkinan tidak akan pernah diimplementasikan:

  • Fungsi Non-Deterministik seperti random() berubah menjadi kekacauan saat digunakan dalam kueri yang terus berjalan.
  • Fungsi Agregat/Jendela tertentu di mana satu perubahan input memaksa perhitungan ulang lengkap dari output, seperti persentil_cont() (fungsi agregat yang digunakan di Postgres untuk mendapatkan metrik seperti median).

Jika ada sintaks PostgreSQL lain yang akan berguna di Materialize dan tidak diimplementasikan, kemungkinan besar sedang berlangsung atau dicatat sebagai masalah terbuka, jika tidak, beri tahu kami!

Sintaks Baru di Materialize

Ada beberapa area di mana kami menambahkan perintah SQL, fungsi, dan tipe data untuk melayani kemampuan Materialize baru dengan lebih baik:

  • Objek Baru – Materialize menambahkan objek SOURCE untuk aliran input data berkelanjutan dari Kafka dan Postgres, SINK adalah mitra untuk output data. BERLANGGANAN adalah alternatif yang terus berjalan untuk SELECT.
  • Fungsi Baru – mz_now() adalah fungsi yang mirip dengan now(), tetapi berjalan terus menerus, memberi pengguna kemampuan untuk membuat filter temporal yang berguna.

Perlu diingat bahwa terlepas dari perbedaan yang disebutkan di atas, sebagian besar sintaks SQL dibagi antara Materialize dan Postgres. Ini memiliki beberapa manfaat:

  • Portabilitas SQL – Kueri dan pola SQL yang ada dapat di-porting ke Materialize tanpa penulisan ulang, dan tanpa memperhatikan perubahan tak terduga dalam komputasi.
  • Keakraban/Pemeliharaan – Berapa banyak variasi SQL yang benar-benar dapat diharapkan dimiliki oleh orang-orang di kepala mereka? Dengan mereplikasi sintaks PostgreSQL, jika Anda tahu cara mengurai tanggal di PostgreSQL, Anda tahu cara mengurai tanggal di Materialize.
  • Keandalan – kurangi insiden penghitungan yang salah dengan menggunakan PostgreSQL sebagai “oracle tepercaya”