- Simulasi edukatif 3D yang merepresentasikan koneksi/backend/shared memory/WAL/storage/checkpoint/autovacuum/replikasi PostgreSQL sebagai bangunan dan distrik, dengan tiap bangunan dan animasi dipetakan ke mekanisme database yang nyata
- Angka dan skala diperkecil agar perilaku internal bisa diamati dalam skala waktu yang lambat, seperti penggantian clock-sweep pada
shared_buffers, pencatatan dan flush WAL, checkpoint pacing, horizon xmin, dan pembengkakan tabel - Ini bukan emulator yang menjalankan kode PostgreSQL asli, melainkan model yang ditulis manual; telah melalui tiga kali peninjauan ahli dan audit visual terpisah berdasarkan dokumentasi dan source PostgreSQL, serta mengunci perhitungan utama dan nilai batas dengan 210 pengujian
- Anda dapat menjalankan skenario seperti kekurangan buffer, transaksi berjalan lama, badai checkpoint,
synchronous_commit=off, dan replay replikasi yang lambat untuk melihat langsung bagaimana pengaturan operasional memengaruhi latensi/pembengkakan/durabilitas/lag replikasi - Aplikasi WebGL2 statis yang dibuat dengan three.js/TypeScript/Vite, dan ke depannya juga mempertimbangkan arah arsitektur hibrida yang menghubungkan hasil eksekusi kueri dan rencana dari PostgreSQL WebAssembly nyata ke model internal saat ini
Cara merepresentasikan PostgreSQL sebagai kota
- PGSimCity adalah proyek visualisasi edukatif independen/nonkomersial yang memungkinkan Anda berjalan-jalan dan menjelajahi struktur internal PostgreSQL
- Alun-alun pusat merepresentasikan
shared_buffers; tinggi 1.024 page frame menunjukkan clock-sweepusage_count, dan warnanya menampilkan status buffer yang sebenarnya - Distrik oranye di timur adalah WAL, area galian di bawah alun-alun adalah direktori data, dan kota di selatan merepresentasikan server standby yang memutar ulang WAL dari server utama dengan sedikit keterlambatan
- Dirancang agar engineer yang belum pernah mengoperasikan database secara langsung dapat memahami fenomena berikut
- Mengapa checkpoint dapat menyebabkan lonjakan latensi
- Bagaimana transaksi yang tidak selesai terus menyebabkan pembengkakan tabel
- Biaya apa yang dikenakan
synchronous_commitsaat commit
Akurasi dan batasan model
- PGSimCity masih merupakan model tahap 0.x, bukan emulator PostgreSQL
- Tidak menjalankan source code PostgreSQL
- Menyesuaikan angka dan skala waktu agar perubahan bisa dilihat manusia
- Tidak melakukan parsing SQL atau menghitung hasil kueri nyata
- Telah melalui tiga kali peninjauan ahli yang mencocokkan akurasi perilaku PostgreSQL dengan
postgresql.org/docsdan source code, dan setiap temuan diperiksa ulang oleh peninjau terpisah yang ditugaskan untuk membantahnya - Klaim implisit yang muncul dari tata letak bangunan/hubungan kedekatan/animasi juga diaudit secara terpisah
- Mencakup 210 pengujian, dan build CI akan dihentikan jika ada pengujian yang gagal
- Titik awal checkpoint berbasis WAL:
max_wal_size / (1 + checkpoint_completion_target) - Cache hit ratio:
blks_hit / (blks_hit + blks_read) - Nilai maksimum clock-sweep
usage_count: 5
- Titik awal checkpoint berbasis WAL:
- Kesalahan yang ditemukan dan proses perbaikannya tercatat dalam riwayat commit
- Operasi sentuh baru diverifikasi di emulasi mobile Chrome
- Perilaku yang disederhanakan dijelaskan secara eksplisit di inspector tiap komponen
Kemungkinan dipadukan dengan engine nyata
- Saat ini menggunakan simulasi yang ditulis langsung untuk menampilkan langkah internal yang tidak diekspos di luar PostgreSQL, seperti proses clock-sweep memilih halaman korban per frame
- Jika PostgreSQL nyata dijalankan di WebAssembly seperti PGlite, hasil kueri dan execution plan bisa diserahkan ke engine nyata
- Informasi yang dapat disediakan engine nyata di browser terbatas pada apa yang diekspos PostgreSQL ke luar, seperti catalog, view
pg_stat_*, danEXPLAIN - Pendekatan hibrida di mana eksekusi nyata dan plan nyata menggerakkan pergerakan di dalam model juga dimungkinkan, tetapi itu adalah arah masa depan, bukan komitmen pengembangan yang sudah pasti
Distrik dan komponen kota
- Client sky: koneksi yang masuk dari lapisan aplikasi
- Postmaster: proses pengawas yang membuat proses backend untuk tiap koneksi, tetapi tidak mengakses data pengguna secara langsung
- Backend row: 16 proses backend, dengan pencahayaan yang menampilkan status saat ini termasuk
idle in transaction - Shared memory plaza
shared_bufferswal_buffers- ProcArray
- tabel lock
- CLOG
- tabel pemetaan buffer
- The excavation: batas antara area memori dan area disk
- Storage
- file heap yang terdiri dari halaman 8KiB
- B-tree dalam bentuk pohon yang nyata
- TOAST
- FSM
- visibility map
- page cache sistem operasi
- disk
- WAL district: walwriter →
pg_walsegment → archiver → walsender - Maintenance yard: checkpointer/background writer/autovacuum launcher dan worker
- Standby: walreceiver/proses startup yang memutar ulang WAL/lag antara kedua proses itu
- Query lab: menampilkan statement backend yang dipilih dalam tahapan parse → rewrite → plan → execute
Warna dan makna visual
- Warna bukan dekorasi, melainkan menyampaikan status dan mekanisme
- WAL: oranye
- dirty page: merah
- clean page: biru
- vacuum: ungu
- checkpoint: merah muda
- background writer: hijau kebiruan
- replication: oranye
- storage: hijau
- index: aqua
- lock: merah
- Struktur digambarkan matte, sementara elemen yang punya makna ditampilkan dengan neon, dan hanya material emissive yang dibuat melewati ambang bloom
Skenario yang bisa dicoba langsung
- Perkecil
shared_buffersmenjadi 64 halamanusage_countruntuh dan clock hand berputar cepat- Ketika clean page yang bisa digusur makin sedikit, backend mulai menulis dirty page-nya sendiri secara langsung
- Aktifkan transaksi berjalan lama
- Horizon xmin ProcArray turun dan berubah merah
- Worker autovacuum terus berputar, tetapi tidak bisa menghapus tuple yang seharusnya dibersihkan
- Tabel
sessionsmembengkak dan tidak pulih
- Jalankan checkpoint storm
- Checkpointer dipercepat dan tahap fsync bergetar
- Setelah itu, full-page write mengalir deras ke distrik WAL
- Atur
synchronous_commit=off- Backend tidak lagi menunggu di
commit_wait - Anda bisa melihat syarat durabilitas yang ditukar dengan respons instan
- Backend tidak lagi menunggu di
- Aktifkan replay lambat
- LSN sent/written/flushed/applied pada server standby makin berjauhan
- Selisih ini sesuai dengan lag replikasi yang diamati di
pg_stat_replication
- Tekan tombol
Guntuk turun ke sudut pandang pejalan kaki setinggi 1,7 m dan melihat buffer serta bangunan sejajar mata
Navigasi dan kontrol
- Kontrol mouse dan sentuh
- Drag kiri: bergerak seperti menggeser peta
- Drag kanan: memutar mengelilingi kota
- Wheel: zoom in/out berdasarkan posisi kursor
- Satu jari: bergerak
- Dua jari: zoom, rotasi, ubah kemiringan
- Mode pergerakan
W/A/S/Datau tombol arah: bergerakSpace/E: naikC/Q: turunShift: bergerak cepatAlt: pergerakan presisi
- Tombol utama
F: ganti kamera terbang/orbitG: berjalan di permukaanH: kembali ke tampilan awalT: tur 14 bab yang memandu seluruh kota/atauCtrl-K: cari komponen/pengaturan/skenario?: peta keyboard dan legenda warnaKatauP: jeda/lanjutkan,/.: atur kecepatan 0,1×~5×1~8: pindah ke distrik clients/backends/shared buffers/WAL/storage/checkpointer/autovacuum/standby
Lisensi dan merek dagang
- Didistribusikan di bawah lisensi Apache-2.0
- Tidak mencakup kode/aset/ilustrasi/logo/karakter/audio/konten game dari SimCity
- Proyek edukatif independen yang tidak berafiliasi/disponsori/disetujui oleh Electronic Arts maupun proyek PostgreSQL
1 komentar
Komentar Hacker News
Saya sangat menyukai arah yang dicoba di sini, tetapi fitur tur-nya terlalu banyak noise. Banyak sekali kotak dan elemen di layar terus berubah sehingga sulit memahami apa yang sedang terjadi, dan sebaiknya dibuat agar pengguna maju sendiri alih-alih otomatis berpindah ke topik berikutnya.
Kalau hanya secara pasif melihat informasi yang ditumpahkan sekaligus, rasanya membingungkan. Pendekatan untuk menunjukkan cara kerja internal teknologi itu sendiri berguna, tetapi perlu mempersempit fokus, bukan menambahkan data, grafik, dan kotak informasi.
Batasan otak manusia sama bagi pengembang maupun pengguna. Meski kita bisa membuat sesuatu yang kompleks dengan LLM, jika kompleksitas dekoratif berupa greeble melewati tingkat tertentu, rasanya tidak seperti dirancang untuk dialami manusia lain.
Jika dibuat tanpa LLM, pengembangnya mungkin tidak bisa menampung seluruh model mentalnya di kepala dan akan mengurangi kompleksitas; pengguna juga punya batasan yang sama. Bahkan saat mencoba memahami metafora animasi dan lampu berkedip, maknanya tertimbun.
Saya tidak mengerti mengapa proses baru berbentuk kotak yang melewati pipa lalu tiba di gedung, dan setelah itu sakelar pinball menyala merah. Ketika mengklik sesuatu, popup kecil bertuliskan
"sessions is the victim"muncul sebentar bersama sebuah paragraf lalu menghilang, membuatnya makin membingungkan.Mungkin ini memang bukan untuk edukasi, atau mungkin saya yang kurang pengetahuan, tetapi jika dilihat sebagai karya yang unik, ini cukup keren.
Begitu melihat layar awal, saya berharap kalau memasukkan kueri, alurnya akan ditunjukkan tahap demi tahap dari parsing input hingga pengembalian hasil, dan saya juga bisa memahami proses otonom yang selalu berjalan paralel terlepas dari kueri.
Upayanya sendiri bagus, tetapi saya tidak tahu harus mulai dari mana dan berhenti di mana.
T.Dulu, untuk memahami scheduling di dalam database, dibutuhkan banyak diagram arsitektur. PGSimCity mengejutkan karena menyajikan proses implementasi teknis yang kompleks dengan cara yang menarik.
Karena open source, gagasan yang sama tampaknya bisa digunakan ulang di bidang lain seperti cloud computing atau Kubernetes.
Ini sangat mirip dengan gambaran di kepala saat saya sedang sangat fokus men-debug program dengan gdb. Jika bisa mengalami debugging VR dengan grafis seperti ini, sepertinya tidak ada cara yang lebih baik untuk mempelajari sebuah codebase.
Saya penasaran seberapa bagus pengalaman yang bisa dibuat jika menghasilkan peta 3D dari kode sembarang.
Kalau ini adalah hasil vibe coding kurang dari 48 jam, saya bertanya-tanya apakah isinya benar-benar akurat. Apakah tidak ada risiko berujung pada kesimpulan keliru atau semacam pengetahuan semu?
Sulit dipercaya
"Rendering The First Frame..."bukan"Reticulating Splines...". UI-nya keren.Saya cukup memahami struktur internal Postgres, tetapi justru merasa bingung. Layarnya terlalu ramai sehingga sulit dipahami, dan setidaknya akan bagus jika ada tombol untuk menurunkan kecepatan.
transactions/s.Kelihatannya benar-benar keren. Sejak beberapa minggu lalu saya mulai melakukan vibe coding untuk Doom untuk Beam, yang memungkinkan kita berjalan-jalan di Beam VM seperti di lantai pabrik, melihat hubungan modul dan fungsi, beban eksekusi, serta error yang memercikkan api.
Belum banyak yang saya buat, tetapi saya ingin terus mengembangkannya sebagai alasan untuk membeli headset VR.
Sepertinya dibuat dengan bantuan AI. Saya juga menggunakan AI untuk mengerjakan proyek vibe coding serupa yang menjelaskan catastrophic forgetting.
Sekarang kalau benar-benar ingin mempelajari sesuatu, saya senang karena selalu bisa mendapat bantuan AI. Dulu sulit menemukan materi yang bagus, tetapi sekarang bottleneck-nya bergeser dari materi ke fokus dan inisiatif pribadi.