Индексы

Система индексов SOBERIS автоматически управляет индексами MongoDB для обеспечения оптимальной производительности запросов. Индексы создаются автоматически на основе аннотаций в JSON-схемах и могут быть просмотрены через интерфейс мониторинга.
Автоматическое управление
Индексы создаются и удаляются автоматически при обновлении схем. Ручное вмешательство не требуется.
Типы индексов

SOBERIS поддерживает несколько типов индексов MongoDB:
  • Single Field - Индекс по одному полю. Наиболее распространенный тип индекса для быстрого поиска по конкретному полю.
  • Text - Текстовый индекс для полнотекстового поиска. Поддерживает поиск по ключевым словам.
  • Multikey - Индекс для массивов. Автоматически создается для полей, содержащих массивы значений.
  • Wildcard - Универсальный индекс для справочников. Индексирует все поля в коллекции.
Создание индексов через схемы

Индексы создаются автоматически при указании аннотации x-index в JSON-схеме:
{
    "type": "object",
    "properties": {
        "username": {
            "type": "string",
            "x-index": "single_field"
        },
        "description": {
            "type": "string",
            "x-index": "text"
        },
        "tags": {
            "type": "array",
            "items": {
                "type": "string"
            },
            "x-index": "multikey"
        }
    }
}
Поддерживаемые значения x-index:
  • single_field - индекс по одному полю
  • text - текстовый индекс для поиска
  • multikey - индекс для массивов
Просмотр индексов

Информация об индексах доступна через REST API и веб-интерфейс. API возвращает данные о всех коллекциях и их индексах.

GET /sbrs-index/get-index-data
Получение данных об индексах для всех коллекций или конкретной коллекции.
# Заголовки запроса:
SBRS-Correlation-Id: uuid
SBRS-Originator: web-interface
SBRS-Message-Id: uuid
SBRS-Schema-Name: collection_name (опционально)
# Пример ответа:
{
    "collections": [
        {
            "collectionName": "users",
            "indexes": [
                {
                    "name": "username_single_idx",
                    "type": "single",
                    "fields": [
                        "username"
                    ]
                },
                {
                    "name": "description_text_idx",
                    "type": "text",
                    "fields": [
                        "description"
                    ]
                }
            ]
        }
    ],
    "sbrsMessageType": "success",
    "sbrsStatusMessage": "Index data retrieved successfully..."
}
Системные индексы

SOBERIS автоматически создает несколько системных индексов для обеспечения базовой функциональности:
  • _id_ - Стандартный индекс MongoDB по полю _id. Создается автоматически для всех коллекций.
  • _correlationId_1_idx - Индекс для отслеживания связанных операций. Создается для всех коллекций для автоматического шардирования.
Важно
Системные индексы нельзя удалить. Они необходимы для корректной работы SOBERIS.
Автоматическое управление

SOBERIS автоматически управляет жизненным циклом индексов:

Создание при публикации схемы
  • При публикации новой схемы с аннотациями x-index автоматически создаются соответствующие индексы

Обновление при изменении схемы
  • При обновлении схемы индексы автоматически пересоздаются в соответствии с новыми аннотациями

Удаление устаревших индексов
  • Индексы, которые больше не нужны согласно схеме, автоматически удаляются
Справочники и Wildcard индексы (Wildcard индексирует все поля)

Для коллекций-справочников (без фиксированной схемы) автоматически создается wildcard индекс:
# Это позволяет выполнять быстрые запросы по любым полям в справочниках, даже если структура документов может различаться.
{
"$**": 1
}
Мониторинг производительности

Эффективность индексов можно отслеживать через:
  • Метрики времени выполнения запросов в системе мониторинга
  • Логи операций с базой данных
  • Статистику использования индексов в MongoDB
  • Анализ планов выполнения запросов
Лучшие практики
  • Добавляйте индексы только для полей, по которым часто выполняется поиск
  • Используйте текстовые индексы для полнотекстового поиска
  • Multikey индексы подходят для массивов значений
  • Мониторьте производительность запросов после создания индексов
Пример использования

Пример создания схемы с различными типами индексов:
{
    "type": "object",
    "properties": {
        "userId": {
            "type": "string",
            "x-index": "single_field",
            "description": "Уникальный идентификатор пользователя"
        },
        "email": {
            "type": "string",
            "format": "email",
            "x-index": "single_field",
            "description": "Email для быстрого поиска"
        },
        "fullText": {
            "type": "string",
            "x-index": "text",
            "description": "Полнотекстовый поиск по содержимому"
        },
        "categories": {
            "type": "array",
            "items": {
                "type": "string"
            },
            "x-index": "multikey",
            "description": "Поиск по категориям"
        },
        "metadata": {
            "type": "object",
            "properties": {
                "title": {
                    "type": "string",
                    "x-index": "single_field"
                }
            }
        }
    },
    "required": [
        "userId",
        "email"
    ]
}
После публикации этой схемы будут созданы следующие индексы:
  • data_userId_single_idx
  • data_email_single_idx
  • data_fullText_text_idx
  • data_categories_multikey_idx
  • data_metadata_title_single_idx
Made on
Tilda