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シャーディングの使用を参照してください。