[PostgreSQL] Arsitektur (men)Dasar
Belajar PostgreSQL dengan praktik secara langsung memang mudah, karena ada banyak sumber yang bisa digunakan untuk dicontoh. Tapi, tanpa dasar yang benar bisa-bisa salah kaprah dan berujung petaka di kemudian hari.
Betul, ada banyak tutorial di luar sana yang memberitahu bagaimana cara setup Postgres server, atau bagaimana caranya setup replikasi baik synchronous atau asynchronous, dan masih banyak topik lainnya. Buat kebutuhan sesaat, ini memang enak dan mudah diikuti. Namun, tentu saja kita jadi tak tahu bagaimana sebenarnya teori dasarnya.
Salah satu hal paling mendasar yang perlu diketahui adalah bagaimana sistem arsitektur Postgres. Dan ketika saya menyebut hal ini, tentu ini tidak termasuk arsitektur Postgres sendiri yang di dalamnya ada banyak sekali komponen.
Dalam jargon database, PostgreSQL menggunakan sistem bermodel client/server (baca: client dan server). Dengan definisi ini, satu sesi dalam Postgres terdiri dari dua komponen berikut:
- Server proses, yang berarti proses dalam server dan mengatur database proses berikut filenya, menerima permintaan koneksi dari client dan melakukan aksi sesuai dengan permintaan client. Server proses ini dikenal dengan nama (1) “postgres”.
- Aplikasi client, alias sebuah alat untuk melakukan operasi dalam database. Tentu saja aplikasi ini bisa bermacam-macam bentuknya, mulai dari yang berbasis teks, grafik, aplikasi web, atau alat lain untuk mengatur dan mengolah database.
Pada umumnya, orang tahu bahwa client dan server biasanya tidak mesti berada di satu mesin yang sama. Begitu juga dengan Postgres. Aplikasi di client belum tentu ada di server dan begitu juga sebaliknya, yang berarti file yang bisa dibuka di mesin client (misalnya CSV file) belum tentu bisa diakses di server.
Postgres, sebagaimana sudah ditebak bisa menangani banyak concurrent proses (secara bersamaan). Namun, yang penting diketahui adalah saat Postgres menerima koneksi baru maka server akan membuat proses (2) “fork” untuk setiap koneksi. Hal ini betujuan untuk memastikan bahwa proses server sendiri (postgres) tidak akan diganggu oleh koneksi lain yang berdatangan (dan kemudian menghilang ketika selesai).
Sebenarnya selain dua jenis proses utama di atas, ada proses tambahan lain yang terdiri dari banyak proses. Proses tersebut antara lain:
- Autovacuum launcher
- Autovacuum worker
- Background writer
- WAL writer
- WAL sender
- WAL receiver
- WAL archiver
- Checkpointer
- Logging collector
- Stats collector
- dan lain-lain
Mendasar dan sederhana. Tapi lebih baik tahu, daripada tersesat. Hal mendasar lainnya akan dilanjut di postingan selanjutnya.