Создание пространственной памяти

Я потратил три месяца на создание «Pinterest для физического мира».

Идея проста. Вы оставляете цифровые заметки, фотографии или истории по определенным GPS-координатам. Люди могут увидеть их, только если физически находятся в этом самом месте. Это превращает реальный мир в коллекцию цифровых капсул времени.

Создание приложения с привязкой к местоположению сложнее, чем кажется. Вот что я узнал о технологическом стеке.

Пространственная база данных

Если вы хотите масштабироваться, нельзя просто хранить широту и долготу как обычные числа. Вам нужны пространственные индексы. Я использовал PostGIS с PostgreSQL.

Он обеспечивает:

  • Пространственное индексирование с помощью R-tree
  • Встроенные вычисления расстояний
  • Быстрые запросы по близости

Если вам нужно найти воспоминания в радиусе 50 метров от пользователя, PostGIS берет на себя всю основную работу.

Стратегия кэширования

Популярные туристические места получают слишком много запросов. Обращение к базе данных каждые две секунды плохо сказывается на производительности. Я использовал команды Redis GEO для кэширования ID воспоминаний в оживленных районах.

Совет от профи: не кэшируйте весь объект в Redis. Кэшируйте только ID. Это снижает потребление памяти и сокращает время выполнения запроса с 20 мс до 2 мс.

Паттерн загрузки

Если ваш сервер будет обрабатывать каждую загрузку фото, он упадет под нагрузкой. Я использовал двухфазный паттерн загрузки:

  • Клиент запрашивает у сервера pre-signed URL
  • Клиент загружает файл напрямую в Cloudflare R2
  • Клиент сообщает серверу, когда загрузка завершена

Я выбрал R2 вместо S3, потому что там нет платы за исходящий трафик (egress fees). Это экономит деньги, когда пользователи скачивают медиафайлы.

Что сработало

  • PostGIS и Redis GEO делают пространственные запросы быстрыми.
  • Загрузка напрямую в R2 позволяет бэкенду масштабироваться.
  • Go и Gin обеспечивают высокую производительность при низком потреблении памяти.
  • Прогрессивная приватность (Приватное, Друзья или Публичное) защищает пользователей.

Что пошло не так

  • Точность GPS нестабильна в городах с высотными зданиями.
  • Проблема «холодного старта» реальна. Приложению нужно много пользователей, чтобы оно «ожило».
  • Модерация контента требует постоянного внимания.

Создание этого проекта научило меня тому, что физическое местоположение — это недооцененное измерение для социальных приложений. Цифровой контент кажется более значимым, когда он привязан к реальному месту.

Источник: https://dev.to/kevinten10/building-spatial-memory-why-i-built-a-pinterest-for-the-physical-world-and-what-i-learned-bpm

Дополнительное обучающее сообщество: https://t.me/GyaanSetuAi