Тема 1: Распределенная система управления и поиска контента (Digital Asset Management)

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

Реализация требований:

  1. MongoDB: Выступает в качестве основной документной базы. В коллекциях хранятся:

    • assets: Документы с метаданными файлов (id, оригинальное имя, размер, MIME-тип, id пользователя, дата загрузки, массив тегов, статус обработки).

    • users: Данные пользователей.

    • api_keys: Ключи для доступа к API.

    • сами файла можно хранить в MongoDB(GridFS), S3 хранилище (предпочтительно), либо в файловой системе на общем диске
  2. OpenSearch: Используется для полнотекстового поиска по названиям, описаниям и тегам активов. Позволяет реализовать сложные запросы типа "найди все изображения .png с тегом презентация, загруженные за последний месяц".

  3. Hazelcast:

    • Кэш метаданных: Кэширует документы из MongoDB по asset_id для быстрого ответа API на запросы к популярным файлам.

    • Системные очереди: Можно организовать очередь задач (например, на генерацию превью для изображений) с помощью IQueue.

REST API (пример):

  • POST /api/assets - Загрузка файла (multipart) + метаданные.

  • GET /api/assets/{id} - Получение метаданных по ID.

  • GET /api/assets/{id}/file - Скачивание файла.

  • GET /api/assets?q=cat+png&tags=animal&page=1 - Поиск по коллекции.

  • DELETE /api/assets/{id} - Удаление актива.

  • Нет меток