LOB 型は、TEXT、BLOB、JSON、Geometryなどのデータ型を格納するために使用されます。 LOB の格納方式には、インラインストレージ(INROW)とアウトラインストレージ(OUTROW)の2種類があります。
インラインストレージ
インラインストレージは、LOBデータをメインテーブルの行と一緒に格納する方式です。LOBデータを読み取る際には、ストレージへのアクセス操作を1回だけ行えば済みます。
アウトラインストレージ
アウトラインストレージは、LOBデータをLOB補助テーブルに格納する方式です。LOBデータを読み取る際には、まずメインテーブルの行を読み取ってアウトラインLOBのロケーター(locator)を取得し、その後そのロケーター情報に基づいてLOB補助テーブルから実際のLOBデータを読み取ります。このプロセスでは、ストレージへのアクセス操作を2回行う必要があります。
LOBストレージの変換
LOBデータのストレージがインラインストレージかアウトラインストレージかは、LOB列のデータサイズによって決まります。しきい値を8192バイトに設定した場合、8192バイトを超えるとアウトラインストレージとして扱われ、それ以下の場合はインラインストレージとして扱われます。
obclient> CREATE TABLE t(pk int, data text) LOB_INROW_THRESHOLD = 8192;
上記のDDLは、テーブル内のLOB列のINROWからOUTROWへの変換しきい値を8192バイトに指定しています。ここで LOB_INROW_THRESHOLD はLOB列のしきい値を表します。
- LOB列のデータが8192バイト以下の場合、LOBデータとメインテーブルの行が一緒に格納されます。
- LOB列のデータが8192バイトを超える場合、すべてのデータがLOB補助テーブルに格納されます。
説明
lob_inrow_thresholdの値を大きくから小さく変更するには、Offline DDLをトリガーする必要があります。
インラインストレージはアウトラインストレージに比べてパフォーマンスが優れており、ストレージへのアクセス回数を減らしてLOBデータの読み取り効率を向上させます。特にLOBデータへの頻繁なアクセスが必要なシナリオでは、インラインストレージを選択することでクエリ速度を高速化し、システムオーバヘッドを低減できます。
LOBタイプ
MySQLモードでは、一般的なLOBタイプをアルファベット順に以下のように並べます:
- ARRAY:配列データ型を格納するために使用され、複数の値の集合を格納できます。
- Roaringbitmap:ビットマップデータを格納するために使用され、主に画像処理と表現に用いられます。
- BLOB(Binary Large Object):画像やファイルなどのバイナリデータを格納するために使用され、最大長は65,535バイトです。
- GEOMETRY:地理空間データを格納するために使用され、空間分析と操作をサポートします。
- JSON:JSON形式のデータを格納するために使用され、構造化データの処理を容易にします。
- LONGTEXT:大量のテキストデータを格納するために使用され、最大長は536,870,910バイトです。
- LONGBLOB:大量のバイナリデータを格納するために使用され、最大長は536,870,910バイトです。
- MEDIUMBLOB:中量のバイナリデータを格納するために使用され、最大長は16,777,215バイトです。
- MEDIUMTEXT:中量のテキストデータを格納するために使用され、最大長は16,777,215バイトです。
- TEXT:少量のテキストデータを格納するために使用され、最大長は65,535バイトです。