SQLDoom: Saat Query Database Menjalankan Game Doom
Baca dalam 60 detik
- Lukas Vogel berhasil memindahkan seluruh logika dan rendering game Doom ke dalam database SQL, bukan ke kode mesin game konvensional.
- Proyek SQLDoom mengeksekusi 1.300 baris SQL dalam 89 blok query untuk menghasilkan frame 640x480 berwarna pada 35 fps, dengan puncak 60 fps di laptop Ryzen 7 7840U.
- Pendekatan ini menantang asumsi bahwa database hanya untuk menyimpan data, sekaligus menjadi ajang unjuk gigi CedarDB yang mengompilasi query kompleks menjadi kode mesin.

Pengembang perangkat lunak Lukas Vogel membuktikan bahwa database SQL bukan sekadar gudang penyimpanan data. Ia sukses menjalankan game legendaris Doom sepenuhnya di dalam database, dengan seluruh logika permainan dan proses rendering dieksekusi melalui query. Proyek yang dinamai SQLDoom ini menyimpan geometri level dan status permainan dalam tabel CedarDB, sementara skrip Python ringan hanya menangani timing, input, dan output tampilan.
Hasilnya? Frame berwarna 640x480 dengan kecepatan 35 frame per detik, dihasilkan dari sekitar 1.300 baris kode SQL yang terbagi dalam 89 blok query. Ini bukan pencapaian pertama Vogel. Sebelumnya, ia merilis DoomQL yang menggunakan raycasting dengan karakter teks skala abu-abu, sehingga lebih menyerupai Wolfenstein 3D ketimbang Doom. Ketiadaan traversal pohon BSP—teknik yang membedakan rendering Doom—mendorongnya menciptakan versi kedua yang lebih ambisius.
Dalam blog pribadinya, Vogel mengakui bahwa menjalankan Doom di database adalah ide yang “jelas buruk”. Namun, tantangan teknis itulah yang memacu eksperimennya. Untuk SQLDoom, ia mensyaratkan agar sistem rendering dan loop permainan sepenuhnya beroperasi lewat SQL, dengan output terbatas pada tabel warna eksak atau bitmap. Menangani geometri level relatif mudah karena kunci pengurutan yang dihitung saat memuat peta memungkinkan satu klausa ORDER BY menentukan bagian dinding mana yang digambar. Namun, lantai dan langit-langit menjadi masalah rumit. Mesin Doom asli menggunakan visplane dan perubahan status yang tidak bisa diterjemahkan langsung ke rendering SQL kolom per kolom. Vogel menggantinya dengan pendekatan yang ia sebut “cukup akal-akalan”, yakni mengulang urutan panel terurut untuk mengisi permukaan tersebut.
Vogel melaporkan bahwa overhead tabel cukup besar, tetapi porting ini tetap lebih cepat daripada DoomQL tahun lalu. “Saya berniat menjadikannya demo teknologi, tapi rasanya seperti Doom sungguhan, meski tidak berbagi satu baris kode pun dengan port Doom yang ada,” ujarnya. SQLDoom juga mendukung mode deathmatch dengan server publik online di Eropa dan Amerika Serikat. Beberapa pengulas yang mencoba demo online menggambarkan kinerjanya lambat, dan satu media menduga masalahnya terletak pada server, bukan pada porting itu sendiri.
“Database menyimpan satu catatan status permainan yang stabil, tanpa pembaruan yang diterapkan sebagian, bug fisika, atau perbedaan pendapat soal apakah roket benar-benar mengenai sasaran.” — Lukas Vogel
Menurut Vogel, pendekatan berbasis database menawarkan konsistensi status permainan yang sulit dicapai oleh mesin game konvensional. The Register mencatat bahwa karya ini sekaligus menjadi etalase bagi CedarDB, sistem database yang mengompilasi query kompleks menjadi kode mesin. Bagi yang ingin mencoba, kode sumber tersedia di GitHub dan dapat dijalankan secara lokal dengan CedarDB serta data WAD asli Doom, atau bergabung ke pertandingan online gratis.
Eksperimen ini membuka diskusi menarik tentang batas antara database dan mesin game. Jika query SQL mampu menangani rendering real-time, bukan tidak mungkin arsitektur perangkat lunak di masa depan akan lebih banyak mengandalkan database sebagai pusat komputasi, bukan sekadar penyimpan data. Di Indonesia, di mana industri game lokal terus tumbuh dan adopsi teknologi cloud semakin masif, pendekatan seperti SQLDoom bisa menjadi inspirasi bagi pengembang untuk bereksperimen dengan arsitektur non-konvensional. Pertanyaannya, apakah teknik ini akan tetap menjadi keisengan teknis, atau justru memicu paradigma baru dalam desain sistem perangkat lunak?



