このドキュメントでは、OceanBaseにおいて非構造化データ、半構造化データ、構造化データを統一的に格納する方法について説明します。これにより、OceanBaseデータベースの基本的な機能を最大限に活用するとともに、ハイブリッド検索を強力にサポートできます。
グラフィズム
OceanBaseデータベースは異なるモダリティのデータを格納でき、ハイブリッド検索をサポートする原理は、テキスト、画像、動画などの異なるモダリティのデータを統一的にベクトルに変換し、ベクトル間の距離を計算することで検索を実現することです。ハイブリッド検索には2つの方式があります。単純検索は単一ベクトルの類似度検索に基づき、複雑検索はベクトルとスカラーのハイブリッド検索に関わります。
ベクトル検索自体には近似性があるため、実際の応用では精度を向上させるために様々な手法を組み合わせる必要があります。正確な検索結果こそがビジネスにより大きな価値をもたらします。
ベクトルインデックスのメモリ設定
OceanBaseのベクトル検索では、ob_vector_memory_limit_percentage 設定を使用してベクトルインデックスのメモリを設定します:
V4.4.1以前のバージョンでは、HNSW/HNSW_SQ/HNSW_BQベクトルインデックスを使用する前に、
ob_vector_memory_limit_percentageを手動で設定してベクトル機能を有効にする必要があります。最適な検索パフォーマンスを得るために、値は30に設定することを推奨します。デフォルト値のままだと、ベクトルインデックスにメモリが割り当てられず、インデックス作成時にエラーが発生します。IVF/IVF_PQインデックスは常駐メモリを必要としないため、このパラメータについては注意する必要はありません。設定例は以下のとおりです:ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;V4.4.1以降のバージョンでは、ベクトル検索機能はデフォルトで有効になっています。デフォルト値の
0は適応モードを意味し、システムがテナント内のベクトルインデックスデータのメモリ使用率を自動調整するため、手動での調整は不要です:- テナントの実メモリが8GB以下の場合、この値は自動的に
40に設定されます。 - テナントの実メモリが8GBを超える場合、この値は自動的に
50に設定されます。
- テナントの実メモリが8GB以下の場合、この値は自動的に
ベクトル列の作成
以下の例では、ベクトルデータ、空間データ、リレーショナルデータを同一のテーブルに格納する方法を示しています。ベクトル列のデータ型は VECTOR であり、作成時に次元数を指定する必要があります。次元数は最大16,000までサポートします。空間列のデータ型は GEOMETRY です:
CREATE TABLE t (
-- リレーショナルデータ(構造化データ)を格納する
id INT PRIMARY KEY,
-- 空間データ(半構造化データ)を格納する
g GEOMETRY,
-- ベクトルデータ(非構造化データ)を格納する
vec VECTOR(3)
);
INSERT ステートメントを使用したベクトルデータの挿入
VECTOR データ型の列を含むテーブルを作成すれば、INSERT ステートメントを直接使用してベクトルをテーブルに挿入できます。データを挿入する際、ベクトルはテーブル定義時に指定された次元数と一致している必要があります。一致しない場合はエラーが発生します。この設計により、データの一貫性とクエリの効率が保証されます。ベクトルの形式は標準的な浮動小数点数の配列で表され、各次元の値は有効な浮動小数点数である必要があります。以下に簡単な例を示します:
INSERT INTO t (id, g, vec) VALUES (
-- 構造化データの挿入
1,
-- 半構造化データの挿入
ST_GeomFromText('POINT(1 1)'),
-- 非構造化データの挿入
'[0.1, 0.2, 0.3]'
);