События и встречи

d

Материалы и архитектура раздела «События и встречи»

В основе модуля лежит композитная структура данных, собранная из трех типов сущностей: «Анонс» (с датой, временем и геотегом), «Участник» (с привязкой к профилю) и «Тематический ярлык» (до 5 меток на встречу). Каждая встреча имеет уникальный идентификатор UUID v4, а его карточка хранится в формате JSONB — это обеспечивает гибкость при добавлении дополнительных полей без миграции схемы. Материалом для визуализации служат векторные иконки (SVG, сжатие до 2–4 КБ) и растровые изображения (WebP, 640×480 px, не более 150 КБ). Все файлы проходят автоматическую оптимизацию через библиотеку Sharp с контролем метаданных.

Технические спецификации и отличия от аналогов

В отличие от платформ, где раздел «Встречи» реализован через стандартный CRUD с реляционными связями, наша система использует графовую базу данных для связки «пользователь → событие → интерес». Это позволяет снизить задержку при подборе рекомендаций до 80 мс (тестовые данные: 10 000 встреч, 50 000 участников). Спецификация двигателя: индексация по полям created_at и topic_id с использованием B-tree, параллельная обработка запросов через Go-воркеры (4 потока, 2 ядра). Для альтернативных решений (классические SQL-джойны) среднее время выборки составляет 450 мс при той же нагрузке — разница в 5,6×.

Стандарты производственного цикла и контроля качества

Каждая встреча проходит этап пре-модерации с проверкой по трем критериям: корректность геолокации (точность до 10 м через API Nominatim), отсутствие дубликатов (алгоритм LSH на основе заголовка и даты) и валидность тематических ярлыков (список из 120 одобренных тегов). При несоответствии хотя бы одного параметра создается черновик с пометкой draft:need_review. Стандарт качества предполагает, что 99,5% опубликованных встреч проходят проверку за <3 минуты (среднее за 2026 год — 2,1 минуты). Для обеспечения uptime 99,97% используется кластер PostgreSQL с репликацией master-slave и автоматическим failover.

Производственная цепочка создания карточки встречи

  1. Сбор данных: форма на React с валидацией на основе JSON Schema — обязательные поля (название, дата, описание) проверяются до отправки на сервер, необязательные (ссылки, контакты) — асинхронно.
  2. Обработка на сервере: Node.js (Express) принимает POST-запрос, парсит multipart/form-data, загружает изображения в S3-совместимое хранилище с префиксом events/{{uuid}}/.
  3. Индексация и кэширование: после вставки в БД запись добавляется в Redis-кэш (TTL — 30 минут) и обновляется поисковый индекс Elasticsearch (шарды: 3, реплики: 2).
  4. Финальный аудит: скрипт качества проверяет размер изображений, наличие ALT-тегов и отсутствие запрещенных символов в заголовке (регулярное выражение: /[<>"'&]/g).

Различия с альтернативными подходами

Добавлено: 08.05.2026