Membina Memori Spatial
Saya menghabiskan masa selama tiga bulan membina sebuah Pinterest untuk dunia fizikal.
Idea ini mudah. Anda meninggalkan nota digital, foto, atau cerita pada koordinat GPS yang khusus. Orang lain hanya boleh melihatnya apabila mereka berdiri secara fizikal di lokasi tepat tersebut. Ia mengubah dunia nyata menjadi koleksi kapsul masa digital.
Membina aplikasi berasaskan lokasi adalah lebih sukar daripada yang disangka. Berikut adalah apa yang saya pelajari tentang tech stack tersebut.
Pangkalan Data Spatial Anda tidak boleh sekadar menyimpan latitud dan longitud sebagai nombor biasa jika anda ingin menskalakannya. Anda memerlukan indeks spatial. Saya menggunakan PostGIS dengan PostgreSQL.
Ia mengendalikan:
- Pengindeksan spatial dengan R-tree
- Pengiraan jarak terbina dalam
- Pertanyaan proksimiti yang pantas
Jika anda perlu mencari memori dalam jarak 50 meter dari seorang pengguna, PostGIS melakukan kerja berat tersebut.
Strategi Pengekalan (Caching) Tempat pelancongan yang popular menerima terlalu banyak permintaan. Menghubungi pangkalan data setiap dua saat adalah buruk untuk prestasi. Saya menggunakan arahan Redis GEO untuk menyimpan cache ID memori di kawasan yang sibuk.
Tip pro: Jangan simpan cache keseluruhan objek dalam Redis. Simpan cache ID sahaja. Ini memastikan penggunaan memori anda rendah dan memendekkan masa pertanyaan daripada 20ms kepada 2ms.
Corak Muat Naik Jika pelayan anda mengendalikan setiap muat naik foto, ia akan tergendala di bawah bebanan tinggi. Saya menggunakan corak muat naik dua fasa:
- Klien meminta URL pra-tandatangan (pre-signed URL) daripada pelayan
- Klien memuat naik fail secara terus ke Cloudflare R2
- Klien memberitahu pelayan apabila muat naik selesai
Saya memilih R2 berbanding S3 kerana tiada yuran egress. Ini menjimatkan wang apabila pengguna memuat turun media.
Apa Yang Berjaya
- PostGIS dan Redis GEO menjadikan pertanyaan spatial pantas.
- Muat naik terus ke R2 membolehkan backend diskalakan.
- Go dan Gin memberikan prestasi tinggi dengan penggunaan memori yang rendah.
- Privasi progresif (Peribadi, Rakan, atau Awam) melindungi pengguna.
Apa Yang Tidak Berjaya
- Ketepatan GPS tidak konsisten di bandar-bandar dengan bangunan tinggi.
- Masalah "cold start" adalah benar. Aplikasi memerlukan ramai pengguna untuk terasa "hidup".
- Moderasi kandungan memerlukan perhatian yang berterusan.
Membina ini mengajar saya bahawa lokasi fizikal adalah dimensi yang sering dipandang rendah untuk aplikasi sosial. Kandungan digital terasa lebih bermakna apabila ia terikat dengan tempat yang nyata.
Komuniti pembelajaran pilihan: https://t.me/GyaanSetuAi
