Construire une mémoire spatiale
J'ai passé trois mois à construire un Pinterest pour le monde physique.
L'idée est simple. Vous laissez des notes numériques, des photos ou des histoires à des coordonnées GPS spécifiques. Les gens ne peuvent les voir que lorsqu'ils se trouvent physiquement à cet endroit précis. Cela transforme le monde réel en une collection de capsules temporelles numériques.
Créer une application basée sur la localisation est plus difficile qu'il n'y paraît. Voici ce que j'ai appris sur la pile technologique.
La base de données spatiale Vous ne pouvez pas simplement stocker la latitude et la longitude sous forme de nombres simples si vous voulez passer à l'échelle. Vous avez besoin d'index spatiaux. J'ai utilisé PostGIS avec PostgreSQL.
Il gère :
- L'indexation spatiale avec R-tree
- Les calculs de distance intégrés
- Des requêtes de proximité rapides
Si vous devez trouver des souvenirs dans un rayon de 50 mètres autour d'un utilisateur, PostGIS fait le plus gros du travail.
La stratégie de mise en cache Les sites touristiques populaires reçoivent trop de requêtes. Interroger la base de données toutes les deux secondes nuit aux performances. J'ai utilisé les commandes Redis GEO pour mettre en cache les identifiants (IDs) des souvenirs dans les zones fréquentées.
Un conseil de pro : ne mettez pas l'objet entier en cache dans Redis. Mettez seulement les IDs en cache. Cela permet de maintenir une faible utilisation de la mémoire et de réduire le temps de requête de 20 ms à 2 ms.
Le modèle de téléchargement Si votre serveur gère chaque téléchargement de photo, il finira par planter sous la charge. J'ai utilisé un modèle de téléchargement en deux phases :
- Le client demande une URL pré-signée au serveur
- Le client télécharge le fichier directement sur Cloudflare R2
- Le client informe le serveur lorsque le téléchargement est terminé
J'ai choisi R2 plutôt que S3 car il n'y a pas de frais de sortie (egress fees). Cela permet d'économiser de l'argent lorsque les utilisateurs téléchargent des médias.
Ce qui a fonctionné
- PostGIS et Redis GEO rendent les requêtes spatiales rapides.
- Les téléchargements directs vers R2 permettent au backend de passer à l'échelle.
- Go et Gin offrent des performances élevées avec une faible utilisation de la mémoire.
- La confidentialité progressive (Privé, Amis ou Public) protège les utilisateurs.
Ce qui n'a pas fonctionné
- La précision du GPS est irrégulière dans les villes avec de hauts bâtiments.
- Le problème de « cold start » est bien réel. L'application a besoin de nombreux utilisateurs pour paraître vivante.
- La modération du contenu nécessite une attention constante.
Construire cela m'a appris que la localisation physique est une dimension sous-estimée pour les applications sociales. Le contenu numérique semble plus significatif lorsqu'il est lié à un lieu réel.
Communauté d'apprentissage optionnelle : https://t.me/GyaanSetuAi
