Membangun Memori Spasial
Saya menghabiskan tiga bulan membangun Pinterest untuk dunia fisik.
Idenya sederhana. Anda meninggalkan catatan digital, foto, atau cerita di koordinat GPS tertentu. Orang lain hanya dapat melihatnya saat mereka berdiri secara fisik di titik tersebut. Ini mengubah dunia nyata menjadi kumpulan kapsul waktu digital.
Membangun aplikasi berbasis lokasi lebih sulit daripada kelihatannya. Berikut adalah apa yang saya pelajari tentang tech stack-nya.
Database Spasial
Anda tidak bisa sekadar menyimpan garis lintang (latitude) dan garis bujur (longitude) sebagai angka biasa jika ingin melakukan penskalaan. Anda membutuhkan indeks spasial. Saya menggunakan PostGIS dengan PostgreSQL.
Ini menangani:
- Pengindeksan spasial dengan R-tree
- Perhitungan jarak bawaan
- Kueri kedekatan yang cepat
Jika Anda perlu menemukan memori dalam radius 50 meter dari pengguna, PostGIS melakukan pekerjaan beratnya.
Strategi Caching
Tempat wisata populer menerima terlalu banyak permintaan. Melakukan kueri ke database setiap dua detik akan memperburuk performa. Saya menggunakan perintah Redis GEO untuk menyimpan cache ID memori di area yang ramai.
Tips pro: Jangan simpan seluruh objek di dalam Redis. Cukup simpan ID-nya saja. Hal ini menjaga penggunaan memori tetap rendah dan memangkas waktu kueri dari 20ms menjadi 2ms.
Pola Unggahan
Jika server Anda menangani setiap unggahan foto, server akan tumbang saat beban tinggi. Saya menggunakan pola unggahan dua fase:
- Klien meminta URL pre-signed ke server
- Klien mengunggah file secara langsung ke Cloudflare R2
- Klien memberi tahu server saat unggahan selesai
Saya memilih R2 daripada S3 karena tidak ada biaya egress. Ini menghemat biaya saat pengguna mengunduh media.
Apa yang Berhasil
- PostGIS dan Redis GEO membuat kueri spasial menjadi cepat.
- Unggahan langsung ke R2 memungkinkan backend untuk berskala.
- Go dan Gin memberikan performa tinggi dengan penggunaan memori yang rendah.
- Privasi progresif (Privat, Teman, atau Publik) melindungi pengguna.
Apa yang Gagal
- Akurasi GPS tidak konsisten di kota-kota dengan gedung-gedung tinggi.
- Masalah "cold start" itu nyata. Aplikasi membutuhkan banyak pengguna agar terasa "hidup".
- Moderasi konten memerlukan perhatian terus-menerus.
Membangun ini mengajarkan saya bahwa lokasi fisik adalah dimensi yang sering diremehkan untuk aplikasi sosial. Konten digital terasa lebih bermakna ketika terikat pada tempat yang nyata.
Komunitas pembelajaran opsional: https://t.me/GyaanSetuAi
