Создание пространственной памяти
Я потратил три месяца на создание «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://t.me/GyaanSetuAi
