Budowanie pamięci przestrzennej
Spędziłem trzy miesiące na budowaniu czegoś w rodzaju Pinterestu dla świata fizycznego.
Pomysł jest prosty. Zostawiasz cyfrowe notatki, zdjęcia lub historie pod konkretnymi współrzędnymi GPS. Ludzie mogą je zobaczyć tylko wtedy, gdy fizycznie znajdą się w tym samym miejscu. To zmienia świat rzeczywisty w kolekcję cyfrowych kapsuł czasu.
Budowanie aplikacji opartej na lokalizacji jest trudniejsze, niż się wydaje. Oto czego dowiedziałem się na temat stosu technologicznego.
Baza danych przestrzennych
Jeśli chcesz skalować rozwiązanie, nie możesz po prostu przechowywać szerokości i długości geograficznej jako zwykłych liczb. Potrzebujesz indeksów przestrzennych. Użyłem PostGIS z PostgreSQL.
Obsługuje:
- Indeksowanie przestrzenne za pomocą R-tree
- Wbudowane obliczenia odległości
- Szybkie zapytania o bliskość
Jeśli musisz znaleźć wspomnienia w promieniu 50 metrów od użytkownika, PostGIS wykonuje najtrudniejszą pracę.
Strategia buforowania
Popularne miejsca turystyczne generują zbyt wiele żądań. Odpytywanie bazy danych co dwie sekundy jest złe dla wydajności. Użyłem komend Redis GEO, aby buforować identyfikatory wspomnień w zatłoczonych obszarach.
Porada ekspercka: Nie buforuj całego obiektu w Redis. Buferuj tylko identyfikatory (ID). Dzięki temu zużycie pamięci pozostaje niskie, a czas zapytania skraca się z 20 ms do 2 ms.
Wzorzec przesyłania plików
Jeśli Twój serwer będzie obsługiwał każde przesyłanie zdjęcia, padnie pod obciążeniem. Zastosowałem dwuetapowy wzorzec przesyłania:
- Klient prosi serwer o pre-signed URL
- Klient przesyła plik bezpośrednio do Cloudflare R2
- Klient informuje serwer, gdy przesyłanie zostanie zakończone
Wybrałem R2 zamiast S3, ponieważ nie ma opłat za transfer danych wychodzących (egress fees). Pozwala to zaoszczędzić pieniądze, gdy użytkownicy pobierają multimedia.
Co zadziałało
- PostGIS i Redis GEO sprawiają, że zapytania przestrzenne są szybkie.
- Przesyłanie bezpośrednio do R2 pozwala na skalowanie backendu.
- Go i Gin zapewniają wysoką wydajność przy niskim zużyciu pamięci.
- Progresywna prywatność (Prywatne, Znajomi lub Publiczne) chroni użytkowników.
Co poszło nie tak
- Dokładność GPS jest niespójna w miastach z wysokimi budynkami.
- Problem „zimnego startu” jest realny. Aplikacja potrzebuje wielu użytkowników, aby wydawać się „żywa”.
- Moderacja treści wymaga ciągłej uwagi.
Budowa tego projektu nauczyła mnie, że lokalizacja fizyczna to niedoceniany wymiar w aplikacjach społecznościowych. Cyfrowa treść wydaje się bardziej znacząca, gdy jest powiązana z prawdziwym miejscem.
Opcjonalna społeczność edukacyjna: https://t.me/GyaanSetuAi
