MilvusのJSONシュレッダー: 柔軟性を備えた88.9倍高速のJSONフィルタリング
最新のAIシステムは、かつてないほど多くの半構造化JSONデータを生成している。顧客情報や製品情報はJSONオブジェクトにコンパクト化され、マイクロサービスはリクエストごとにJSONログを発行し、IoTデバイスはセンサーの読み取り値を軽量のJSONペイロードでストリーミングし、今日のAIアプリケーションは構造化された出力のためにJSONを標準化することが多くなっています。その結果、ベクトルデータベースにJSONのようなデータが大量に流れ込むことになる。
従来、JSONドキュメントを扱うには2つの方法があった:
JSONの各フィールドを固定スキーマに事前定義し、インデックスを構築する:このアプローチは、確かなクエリパフォーマンスを実現するが、硬直的である。データフォーマットが変更されると、新しいフィールドや変更されたフィールドがあるたびに、手間のかかるデータ定義言語(DDL)の更新やスキーマの移行が発生します。
JSONオブジェクト全体を1つのカラムとして格納する(MilvusのJSONタイプとDynamic Schemaの両方がこのアプローチを採用しています):このオプションは優れた柔軟性を提供しますが、クエリのパフォーマンスが犠牲になります。各リクエストは実行時にJSONを解析し、多くの場合テーブルをフルスキャンする必要があるため、データセットが大きくなるにつれて待ち時間が急増します。
以前は、柔軟性とパフォーマンスのジレンマでした。
Milvusに新しく導入されたJSONシュレッダー機能を使えば、もうそんなことはありません。
JSON Shreddingの導入により、Milvusはスキーマフリーの俊敏性とカラム型ストレージのパフォーマンスを実現し、大規模な半構造化データを柔軟かつクエリフレンドリーにします。
JSONシュレッディングの仕組み
JSONシュレッダーは、行ベースのJSONドキュメントを高度に最適化されたカラム型ストレージに変換することで、JSONクエリを高速化します。Milvusは、データモデリングにおけるJSONの柔軟性を維持しながら、カラム型ストレージを自動的に最適化することで、データアクセスとクエリのパフォーマンスを大幅に向上させます。
疎なJSONフィールドや希少なJSONフィールドを効率的に処理するために、Milvusは共有キーのための転置インデックスも備えている。JSONドキュメントの挿入は通常通り行い、Milvusが最適なストレージとインデックスを内部で管理します。
Milvusは、様々な形状や構造を持つ生のJSONレコードを受信すると、各JSONキーの出現率と型の安定性(データ型が文書間で一貫しているか)を分析します。この分析に基づいて、各キーは3つのカテゴリのいずれかに分類されます:
タイプされたキー:ほとんどのドキュメントに出現し、常に同じデータ型を持つキー(例:すべての整数またはすべての文字列)。
動的キー:頻繁に現れるがデータ型がまちまちなキー(例:文字列のときもあれば整数のときもある)。
共有キー:頻度が低く、まばらで、入れ子になっており、設定可能な頻度のしきい値を下回っているキー。
Milvusは効率を最大化するため、各カテゴリーを異なる方法で処理する:
型付きキーは専用の強い型付きカラムに格納される。
動的キーは、実行時に観測される実際の値型に基づいて動的カラムに配置される。
型付きカラムと動的カラムの両方がArrow/Parquetカラム形式で格納され、高速スキャンと高度に最適化されたクエリ実行を実現する。
共有キーはコンパクトなバイナリJSONカラムに統合され、共有キーの転置インデックスを伴う。このインデックスは、無関係な行を早期に刈り込み、クエリされたキーを含む文書のみに検索を制限することで、低頻度フィールドに対するクエリを高速化する。
このアダプティブカラム型ストレージと転置インデックスの組み合わせが、MilvusのJSONシュレッディングメカニズムの中核を成しており、柔軟性と高性能の両立を可能にしている。
全体的なワークフローを以下に示す:
JSONシュレッダーの仕組みの基本を説明したところで、このアプローチを柔軟かつ高性能にする主要な機能を詳しく見ていきましょう。
シュレッダーと列化
新しいJSONドキュメントが書き込まれると、Milvusはそれを分解し、最適化されたカラム型ストレージに再編成します:
型付きキーと動的キーは自動的に識別され、専用のカラムに格納されます。
JSONにネストされたオブジェクトが含まれている場合、Milvusはパスベースのカラム名を自動的に生成します。例えば、
userオブジェクト内のnameフィールドは、/user/nameというカラム名で格納されます。共有キーは1つのコンパクトなバイナリJSONカラムにまとめて格納されます。これらのキーは頻繁に出現しないため、Milvusはこれらのキーのための転置インデックスを構築し、高速なフィルタリングを可能にし、システムが指定されたキーを含む行を素早く見つけることを可能にします。
インテリジェントなカラム管理
Milvusは、JSONをカラムに細断するだけでなく、動的なカラム管理によってインテリジェンスを追加し、JSON細断がデータの進化に柔軟に対応できるようにします。
カラムは必要に応じて作成されます:新しいキーがJSONドキュメントに現れると、Milvusは自動的に同じキーを持つ値を専用のカラムにグループ化します。これにより、ユーザが前もってスキーマを設計することなく、カラム型ストレージのパフォーマンス上の利点を維持することができます。また、Milvusは新しいフィールドのデータ型(INTEGER、DOUBLE、VARCHARなど)を推測し、効率的なカラム形式を選択します。
すべてのキーは自動的に処理されます:MilvusはJSONドキュメント内のすべてのキーを分析し、処理します。これにより、フィールドの事前定義やインデックスの構築をユーザーに強いることなく、幅広いクエリをカバーすることができます。
クエリの最適化
データが適切なカラムに再編成されると、Milvusは各クエリに対して最も効率的な実行パスを選択します:
型付きキーと動的キーのダイレクトカラムスキャン:既にカラムに分割されているフィールドを対象とするクエリの場合、Milvusはそのカラムを直接スキャンすることができます。これにより、処理する必要があるデータの総量が削減され、SIMDアクセラレーションによるカラム計算を活用することで、さらに高速な実行が可能になります。
共有キーのインデックス検索:Milvusは、クエリがそれ自身のカラムに昇格されなかったフィールド(通常、稀なキー)を含む場合、共有キーのカラムに対してそのクエリを評価します。このカラムに構築された転置インデックスにより、milvusは指定されたキーを含む行を素早く特定し、残りの行をスキップすることができる。
自動メタデータ管理:Milvusはグローバルなメタデータと辞書を継続的に管理するため、入力されるJSONドキュメントの構造が時間とともに変化しても、クエリは正確で効率的な状態を維持します。
パフォーマンスベンチマーク
JSONドキュメント全体を単一のrawフィールドとして保存した場合と、新しくリリースされたJSONシュレッダー機能を使用した場合のクエリパフォーマンスを比較するベンチマークを設計しました。
テスト環境と方法
ハードウェア:1コア/8GBクラスタ
データセットJSONBenchからの100万ドキュメント
方法論異なるクエリパターンでQPSとレイテンシを測定
結果:タイプされたキー
このテストでは、ほとんどのドキュメントに存在するキーをクエリしたときのパフォーマンスを測定した。
| クエリー表現 | QPS(シュレッダーなし) | QPS(シュレッダーあり) | パフォーマンス向上 |
|---|---|---|---|
| json['time_us'] > 0 | 8.69 | 287.5 | 33x |
| json['kind'] == 'コミット' | 8.42 | 126.1 | 14.9x |
結果:共有キー
このテストでは、"共有 "カテゴリーに分類される、ネストされた疎なキーのクエリに焦点を当てました。
| クエリ式 | QPS(シュレッダーなし) | QPS(シュレッダーあり) | パフォーマンス向上 |
|---|---|---|---|
| json['identity']['seq'] > 0 | 4.33 | 385 | 88.9x |
| json['identity']['did'] == 'xxxxx' | 7.6 | 352 | 46.3x |
共有キーのクエリは最も劇的な改善(最大89倍高速化)を示し、型付きキーのクエリは一貫して15~30倍の高速化を実現しています。全体的に、JSON Shreddingはすべてのクエリタイプで恩恵を受け、全体的にパフォーマンスが向上しています。
今すぐ試す
APIログ、IoTセンサーデータ、急速に進化するアプリケーションのペイロードのいずれを扱う場合でも、JSON Shreddingは、柔軟性と高いパフォーマンスの両方を実現する稀有な能力を提供します。
この機能は現在利用可能です。詳細はこちらのドキュメントをご覧ください。
Milvusの最新機能について、ご質問やディープダイブをご希望ですか?私たちの Discordチャンネルに参加するか、 GitHubに課題を提出してください。また、 Milvusオフィスアワーを通して、20分間の1対1のセッションを予約し、洞察やガイダンス、質問への回答を得ることもできます。
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



