この記事では、非構造化データ、半構造化データ、および構造化データをOceanBaseにまとめて保存する方法について説明します。この機能により、OceanBaseデータベースの基本的な能力を最大限に活用するだけでなく、ハイブリッド検索のための強力なサポートも提供します。
異種データ型の統合格納
OceanBaseデータベースは、さまざまな種類(モダリティ)のデータを保存できます。ハイブリッド検索をサポートする原理は、テキスト、画像、動画などの形式が全く異なるデータを全てベクトルに変換し、ベクトル間の距離を計算することによって検索を実現することです。ハイブリッド検索には2つの方法があります。単純な検索は単一のベクトルの類似度検索に基づいており、複雑な検索はベクトルとスカラーのハイブリッド検索に関係します。
ベクトル検索は本質的に近似的な検索のため、実際の応用では精度を向上させるためにさまざまな手法を組み合わせる必要があります。正確な検索結果こそが、ビジネスにより大きな価値をもたらします。
ベクトルインデックスのメモリの設定
OceanBaseのベクトル検索では、ob_vector_memory_limit_percentage設定を使ってベクトルインデックスのメモリを設定できます。
V4.3.5 BP3以前では、
ob_vector_memory_limit_percentageを手動で設定してベクトル機能を有効にする必要があります。最適なクエリパフォーマンスを得るために、値は30に設定することをお勧めします。デフォルト値のままだと、ベクトルインデックスにメモリが割り当てられず、インデックス作成時にエラーが発生します。設定例は以下の通りです:ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;V4.3.5 BP3以降では、ベクトル検索機能がデフォルトで有効になっています。デフォルト値の
0は適応モードを意味し、システムがテナント内のベクトルインデックスデータのメモリ使用率を自動的に調整します。手動で調整する必要はありません:- テナントの実際のメモリが8GB以下の場合、この値は自動的に
40に設定されます。 - テナントの実際のメモリが8GBを超える場合、この値は自動的に
50に設定されます。
- テナントの実際のメモリが8GB以下の場合、この値は自動的に
VECTOR型列の作成
以下の例では、ベクトルデータ、空間データ、リレーショナルデータを同一のテーブルに保存する方法を示しています。ベクトル列のデータ型はVECTORで、作成時に次元数を指定する必要があります。次元数は最大で16000までサポートされます。空間列のデータ型は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]'
);