Milvus
Zilliz
  • Home
  • Blog
  • Измельчение JSON в Milvus: 88,9-кратное ускорение фильтрации JSON с гибкостью

Измельчение JSON в Milvus: 88,9-кратное ускорение фильтрации JSON с гибкостью

  • Engineering
December 04, 2025
Jack Zhang

Современные системы искусственного интеллекта производят больше полуструктурированных данных в формате JSON, чем когда-либо прежде. Информация о клиентах и продуктах сжимается до объекта JSON, микросервисы выдают журналы JSON при каждом запросе, IoT-устройства передают показания датчиков в виде легких полезных нагрузок JSON, а современные приложения ИИ все чаще стандартизируют JSON для структурированного вывода. В результате в векторные базы данных стекается поток JSON-подобных данных.

Традиционно существует два способа работы с документами JSON:

  • Предопределить каждое поле JSON в фиксированной схеме и создать индекс: Этот подход обеспечивает высокую производительность запросов, но он негибок. При изменении формата данных каждое новое или модифицированное поле вызывает очередной раунд болезненных обновлений языка определения данных (DDL) и миграций схемы.

  • Хранить весь объект JSON в виде одного столбца (такой подход используется и в типе JSON, и в динамической схеме Milvus): Этот вариант обеспечивает отличную гибкость, но ценой снижения производительности запросов. Каждый запрос требует разбора JSON во время выполнения и часто полного сканирования таблицы, что приводит к задержкам, которые увеличиваются по мере роста набора данных.

Раньше это была дилемма гибкости и производительности.

Теперь это не так, благодаря недавно появившейся в Milvus функции JSON Shredding.

С внедрением JSON Shredding Milvus теперь обеспечивает гибкость без схем и производительность колоночного хранилища, наконец-то делая крупномасштабные полуструктурированные данные гибкими и удобными для запросов.

Принцип работы JSON Shredding

Измельчение JSON ускоряет запросы JSON за счет преобразования документов JSON, основанных на строках, в высоко оптимизированное столбцовое хранилище. Milvus сохраняет гибкость JSON для моделирования данных, при этом автоматически оптимизируя столбцовое хранение, что значительно повышает доступ к данным и производительность запросов.

Для эффективной работы с разреженными или редкими полями JSON в Milvus также предусмотрен инвертированный индекс для общих ключей. Все это происходит прозрачно для пользователей: вы можете вставлять JSON-документы, как обычно, и предоставить Milvus самому управлять оптимальной стратегией хранения и индексирования.

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

  • Типовые ключи: Ключи, которые встречаются в большинстве документов и всегда имеют один и тот же тип данных (например, все целые числа или все строки).

  • Динамические ключи: Ключи, которые появляются часто, но имеют смешанные типы данных (например, иногда строка, иногда целое число).

  • Общие ключи: Ключи, которые появляются нечасто, редко или вложенно, и их частота ниже настраиваемого порога.

Milvus обрабатывает каждую категорию по-разному, чтобы добиться максимальной эффективности:

  • Типизированные ключи хранятся в специальных столбцах с сильной типизацией.

  • Динамические ключи помещаются в динамические колонки на основе фактического типа значения, наблюдаемого во время выполнения.

  • Как типизированные, так и динамические столбцы хранятся в формате Arrow/Parquet columnar для быстрого сканирования и оптимизации выполнения запросов.

  • Общие ключи объединяются в компактный двоичный-JSON-столбец, сопровождаемый инвертированным индексом общих ключей. Этот индекс ускоряет выполнение запросов по низкочастотным полям, отсекая нерелевантные строки и ограничивая поиск только теми документами, которые содержат запрашиваемый ключ.

Эта комбинация адаптивного столбчатого хранилища и инвертированного индекса составляет основу механизма измельчения JSON в Milvus, обеспечивая гибкость и высокую производительность в масштабе.

Общая схема работы показана ниже:

Теперь, когда мы рассмотрели основные принципы работы JSON Shredding, давайте подробнее рассмотрим ключевые возможности, которые делают этот подход гибким и высокопроизводительным.

Измельчение и колонкаризация

Когда записывается новый JSON-документ, Milvus разбивает его на части и реорганизует в оптимизированное колоночное хранилище:

  • Типизированные и динамические ключи автоматически идентифицируются и хранятся в специальных колонках.

  • Если JSON содержит вложенные объекты, Milvus автоматически генерирует имена колонок на основе путей. Например, поле name внутри объекта user может храниться с именем колонки /user/name.

  • Общие ключи хранятся вместе в одном компактном двоичном столбце JSON. Поскольку такие ключи встречаются нечасто, Milvus строит для них инвертированный индекс, обеспечивающий быструю фильтрацию и позволяющий системе быстро находить строки, содержащие указанный ключ.

Интеллектуальное управление столбцами

Помимо измельчения JSON в столбцы, Milvus добавляет дополнительный уровень интеллекта за счет динамического управления столбцами, обеспечивая гибкость JSON Shredding по мере изменения данных.

  • Колонки создаются по мере необходимости: Когда во входящих документах JSON появляются новые ключи, Milvus автоматически группирует значения с одним и тем же ключом в специальный столбец. Это позволяет сохранить преимущества столбцового хранения в плане производительности, не требуя от пользователей предварительной разработки схем. Milvus также определяет тип данных новых полей (например, INTEGER, DOUBLE, VARCHAR) и выбирает для них эффективный столбцовый формат.

  • Каждый ключ обрабатывается автоматически: Milvus анализирует и обрабатывает каждый ключ в документе JSON. Это обеспечивает широкое покрытие запросов, не заставляя пользователей заранее определять поля или создавать индексы.

Оптимизация запросов

После реорганизации данных в нужные колонки Milvus выбирает наиболее эффективный путь выполнения для каждого запроса:

  • Прямое сканирование столбцов для типизированных и динамических ключей: Если запрос нацелен на поле, которое уже разделено на отдельный столбец, Milvus может сканировать этот столбец напрямую. Это позволяет сократить общий объем данных, которые необходимо обработать, и использовать ускоренные SIMD-вычисления по столбцам для еще более быстрого выполнения.

  • Индексированный поиск для общих ключей: Если в запросе используется поле, которое не было вынесено в отдельный столбец - как правило, это редкий ключ, - Milvus оценивает его по столбцу с общим ключом. Инвертированный индекс, построенный по этому столбцу, позволяет Milvus быстро определить, какие строки содержат указанный ключ, и пропустить остальные, что значительно повышает производительность для полей с низкой частотой встречаемости.

  • Автоматическое управление метаданными: Milvus постоянно поддерживает глобальные метаданные и словари, чтобы запросы оставались точными и эффективными, даже если структура входящих JSON-документов изменяется с течением времени.

Контрольные показатели производительности

Мы разработали бенчмарк для сравнения производительности запросов при хранении всего JSON-документа в виде одного необработанного поля и при использовании недавно выпущенной функции измельчения JSON.

Тестовая среда и методология

  • Оборудование: 1 ядро/8 ГБ кластер

  • Набор данных: 1 миллион документов из JSONBench

  • Методология: Измерение QPS и задержки для различных шаблонов запросов

Результаты: набранные ключи

В этом тесте измерялась производительность при запросе ключа, присутствующего в большинстве документов.

Выражение запросаQPS (без измельчения)QPS (с измельчением)Увеличение производительности
json['time_us'] > 08.69287.533x
json['kind'] == 'commit'8.42126.114.9x

Результаты: общие ключи

В этом тесте мы сосредоточились на запросах к разрозненным вложенным ключам, которые относятся к категории "общие".

Выражение запросаQPS (без измельчения)QPS (с измельчением)Увеличение производительности
json['identity']['seq'] > 04.3338588.9x
json['identity']['did'] == 'xxxxx'7.635246.3x

Запросы с общим ключом демонстрируют самые значительные улучшения (до 89× быстрее), в то время как запросы с типизированным ключом стабильно ускоряются на 15-30×. В целом, каждый тип запросов выигрывает от использования JSON Shredding, причем явный прирост производительности наблюдается повсеместно.

Попробуйте прямо сейчас

Работаете ли вы с журналами API, данными датчиков IoT или быстро меняющимися полезными нагрузками приложений, JSON Shredding дает вам редкую возможность обеспечить гибкость и высокую производительность.

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

У вас есть вопросы или вы хотите получить подробную информацию о любой функции последней версии Milvus? Присоединяйтесь к нашему каналу Discord или создавайте проблемы на GitHub. Вы также можете записаться на 20-минутную индивидуальную сессию, чтобы получить понимание, руководство и ответы на свои вопросы в Milvus Office Hours.

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    Продолжить чтение