1.18 Oracle Spatialによるシャード・データベースのサポート
Spatialでは、シャード・データベース・テクノロジの使用をサポートしています。
シャード化された空間表は通常の方法で作成しますが、CREATE SHARDED TABLEおよび適切なパーティション化を指定します。たとえば:
CREATE SHARDED TABLE departments
( department_id NUMBER(4),
geojson VARCHAR2(4000) CHECK (geojson IS JSON),
geoloc mdsys.sdo_geometry,
CONSTRAINT dept_id_pk PRIMARY KEY(department_id)
)
PARTITION BY CONSISTENT HASH (department_id)
PARTITIONS AUTO
TABLESPACE SET ts1;
通常の方法で、この表に特殊な索引を作成します。たとえば:
CREATE INDEX sidx on departments(geoloc) indextype is mdsys.spatial_index_v2 local;
ただし、索引に関しては次ような考慮事項があります。
- グローバル索引は、シャード化された空間表ではサポートされていません。CREATE INDEX文に、キーワード
LOCAL
を含める必要があります。 - シャード化された空間表での空間索引は、システム管理(
INDEXTYPE=MDSYS.SPATIAL_INDEX_V2
)である必要があります。
機能的な空間索引がサポートされています。たとえば:
CREATE INDEX sidx on departments(json_value(geojson, ‘$’, returning sdo_geometry)) indextype is mdsys.spatial_index_v2 local;
また、シャード・データベースを使用するアプリケーション開発については、次のような要件およびガイドラインがさらに適用されます。
- シャード・データベースの主な利点は、データをシャードと呼ばれる半自律的な複数のリージョンにパーティション化できるということです。(空間アプリケーションでは、リージョンとは都市または州である場合があります)。シャードを使用すると、特定のリージョンで実行されているアプリケーションが、他のシャード内のユーザーから干渉を受けることなく、単一データベースのパフォーマンス上の利点をすべて獲得できます。
ただし、考えられるマイナス面として、アプリケーションによってはシャード・データベース環境でパーティション間のデータ移動がうまく機能しない場合があるということが挙げられます。たとえば、トラック移動の追跡などのアプリケーションの場合は、トラックが単一のシャード(リージョン)内に存在する場合には向いていますが、トラックがリージョンからリージョンに移動する場合には不向きです。
操作する(DML文および問合せによって)データがどこに存在するかを把握する必要があります。アプリケーションにおいては、他のシャード内のデータへのアクセスは、座標インスタンスから行う必要があります。また、更新が想定どおりに機能しない可能性があるため、削除/挿入操作を実行しないとあるシャードから別のシャードにデータを移行することが難しい場合があります。
- MERGE PARTITIONやSPLIT PARTITIONなどのパーティション化管理操作(PMO)は、Spatialではサポートされていません。
シャード化された空間データに対してSpatialが操作を実行する場合、必要に応じて、次の処理が自動的に実行されます。
- シャードごとに別個にUSER_SDO_GEOM_METADATAビューが作成されます。
- すべてのDDL操作(CREATE INDEXやALTER INDEXなど)がその座標に対して実行され、自動的にシャードに伝播されます。
- クロスシャードを必要とするすべての問合せがその座標に対して実行され、自動的に集計されます。シャード固有の問合せは、個々のシャードに対して実行されます。
Oracleシャーディングの概要については、Oracleシャーディングの使用を参照してください。
親トピック: Spatialの概念