GanosBase には、Lindorm 用の組み込み空間インデックスが含まれています。 時空間データを挿入する際に、作成するインデックスを指定します。HBase テーブルのキーと値のペアを手動で設計する必要はありません。 データを挿入する前に、インデックステーブルのスキーマを定義してください。
GanosBase は 5 種類のインデックスをサポートしています。 デフォルトでは、5 種類すべてのインデックスが作成されます。これにより、すべてのシナリオで最適なクエリパフォーマンスが得られますが、より多くのストレージを使用します。 ストレージ使用量を削減するには、クエリパターンに一致するインデックスタイプのみを作成してください。
インデックスタイプ
次の表を参考に、ご利用のジオメトリタイプとクエリパターンに適したインデックスを選択してください。
| インデックス | ジオメトリ | クエリタイプ |
|---|---|---|
| ID | 任意 | フィーチャー ID (FID) 検索。FID は一意である必要があります。 |
| Z2 | ポイントオブジェクト | 空間クエリ (ジオフェンス、範囲) |
| XZ2 | ラインオブジェクト、ポリゴン | 空間クエリ (ジオフェンス、範囲) |
| Z3 | ポイントオブジェクト | 時空間クエリ (空間範囲と期間内の履歴軌跡) |
| XZ3 | ラインオブジェクト、ポリゴン | 時空間クエリ |
| XZ2T | ラインオブジェクト、ポリゴン | 時空間クエリ。軌跡ラインモデルのクエリに対してより効果的です。 |
| XYZ | ポイントオブジェクトのみ | 3次元クエリ (経度、緯度、標高) |
| Attribute | N/A | 他の属性列に対するクエリ |
仕組み
インデックステーブルの作成には、次の 2 つのステップが含まれます。
空間データ型または時空間データ型を定義する
SimpleFeatureTypeを指定します。スキーマ名を設定します。 スキーマはインデックステーブルに対応します。
スキーマ列 (属性列、ジオメトリ列、日付列) を定義します。
(オプション) 追加のパラメーター (圧縮メソッド、TWKB (Tiny Well-Known Binary) フォーマット、インデックス固有のパラメーター) を設定します。
指定された
SimpleFeatureTypeに基づいてオブジェクトを作成します。
特定のインデックスの作成
デフォルトでは、GanosBase は 5 種類すべてのインデックスを作成します。 特定のインデックスのみを作成するには、createSchema を呼び出す前に、SimpleFeatureType で geomesa.indices.enabled を設定します。
// sft は SimpleFeatureType のインスタンスです。
sft.getUserData().put("geomesa.indices.enabled", "{index_name}:{col1}:{col2}:...,{index_name}:{col}");パラメーターリファレンス:
| パラメーター | 説明 |
|---|---|
index_name | インデックスタイプ。 有効な値: id、attr、z2、z3、xz2、xz3、xyz |
col | SimpleFeatureType |
複数のインデックスはコンマ (
,) で区切ります。インデックス名とその列はコロン (
:) で区切ります。
例: Z3 インデックスと属性インデックスのみを作成します。
Z3 インデックスは start+dtg の列ペアと end+dtg の列ペアをカバーします。 属性インデックスは name+dtg をカバーします。
sft.getUserData().put("geomesa.indices.enabled", "z3:start:dtg,z3:end:dtg,attr:name:dtg");時空間セカンダリインデックス
GanosBase は、Lindorm がサポートするネイティブセカンダリインデックスの上に時空間セカンダリインデックスを構築します。 シリアル化された時空間列に対するセカンダリインデックスは効果がありません。
セカンダリインデックスを機能させるには、まずエンコードされた時空間列をプライマリテーブルに追加する必要があります。 この列には、時空間属性の空間充填曲線でエンコードされた値が格納されます。 その後、このエンコードされた列にセカンダリインデックスが構築されます。
デフォルトでは、セカンダリインデックステーブルに冗長列は存在しません。 冗長列は将来のバージョンでサポートされる予定です。
プライマリテーブル作成時のセカンダリインデックスの作成
createSchema を呼び出す前に、SimpleFeatureType の userData パラメーターを設定します。
// sft は SimpleFeatureType のインスタンスです。
sft.getUserData().put("geomesa.secondary.enabled", "true");
sft.getUserData().put("geomesa.primary.index", "id");
sft.getUserData().put("geomesa.indices.enabled", "id,z3");createSchema が完了すると、プライマリテーブルとセカンダリインデックステーブルの両方が、上の図に示すストレージ構造で作成されます。
既存のプライマリテーブルへのセカンダリインデックスの作成
プライマリテーブルは、geomesa.secondary.enabled を "true" に設定して作成されている必要があります。 LindormDataStore.createIndex を呼び出してインデックスを追加します。
String index = "attr:dtg";
lindormDS.createIndex(schemaName, index);制限事項
履歴データの同期中は、インデックステーブルを作成しないでください。