データの把握

Point In Polygon のソリューションを構築する際には、データがパフォーマンスと使用する Spectrum 操作の選択に与える影響と、データの制約事項を理解することが重要です。

データの場所ソリューションにおけるデータの場所と種類を把握することが重要です。例えば、ファイル システム上に TAB ファイルがあるのか、DBMS にデータがあるのかによって、処理のパフォーマンスは変わります。Spectrum は、一部の操作 (空間結合) の処理をデータベース (Oracle や SQL Server など) にプッシュ ダウンします。それによってパフォーマンスが向上します。例えば、次のような操作があるとします。

Select a.id, b.id from flood_plane a, customers b where MI_Contains(a.geom, b.geom)

ジオメトリ形式MapInfo のネイティブ ジオメトリ形式を使用するか、x/y 形式のファイル (緯度/経度値を含む CSV ファイルなど) を使用するかで、パフォーマンスは異なります。パフォーマンスを向上させるには、MapInfo のネイティブ ジオメトリ形式の代わりに x/y 形式を使用することを検討してください。

データは固定か可変か(すべてまたは一部の) データが変化しないことがわかっており、Query Spatial Data 処理を使用する場合に、パフォーマンスを大幅に向上させることのできる、名前付きリソース作成時の設定オプションがあります。Spectrum ではこれを、可変性と呼んでいます。デフォルトでは、すべてのリソースの可変性が true に設定されています。つまり Spectrum は、データはいつでも変更される可能性があると想定し、データにアクセスする度にそれが変更されているかどうかを確認し、新しいデータを読み込む必要があるかどうかを判断します。

可変性が Point In Polygon 処理に与える影響可変性が true に設定されている場合は、データ ソースが変更されていなくても、リソースを確認する処理だけでパフォーマンスは低下します。データが変化しないことがわかっており、パフォーマンスが求められる場合は、可変性をオフにします。パフォーマンスが重要で、変化するデータ (クライアント リストや測点) もあるが、変化しないデータ (小区画、土地、販売地域など) もあることがわかっている場合は、変化しないデータのできるだけ多くに対して、可変性をオフにします。それによってパフォーマンスは向上します。可変性と、リソースに対してこの設定を変更する方法の詳細については、「データ ソースの可変性」を参照してください。

TAB ファイルを使用するかTAB ファイルを使用する場合は、オープン ファイル ハンドルのプールを維持して、読み取る度にファイルを開き直す手間を省くことができます。Spectrum Spatial は、可変性が false に設定されたネイティブ TAB ファイルのファイル ハンドル プールを使用します。ネイティブ TAB ファイルには、ネイティブ拡張 TAB ファイルとシームレス TAB ファイルが含まれます。Spectrum Spatial リポジトリのすべてのテーブルは、デフォルトで可変である (true) と設定されます。ネイティブ TAB ファイルが可変であるということは、そのスキーマが任意の時点で変更される可能性があることを意味します。このパフォーマンス向上機能を活用するには、Spatial Manager で可変性を False に設定します。一般的に、データが既知の期間にしか変更しないか、まったく変更しない場合は、可変性を False に設定することが推奨されます。

ファイル ハンドル プールは、デフォルトで有効になります。無効にするには、\server\modules\spatial\pool-tab.properties に移動し、tab.cache.enabled を false に設定します。この設定変更を反映するには、サーバーを再起動する必要があります。

ファイル ハンドル プールの設定は、tab-file-handle-pool.properties ファイルを使って行います。このファイルも \server\modules\spatial フォルダにあります。使用できるプロパティとして、プールに割り当てることができるハンドルの最大数 (maxTotal)、1 つのファイルに割り当てることができるハンドルの最大数 (maxTotalPerKey)、プールに保持されたファイル ハンドルが閉じられるまでの最小不使用時間 (minEvictableIdleTimeMillis) などがあります。

シームレス テーブルの場合は、次の一般的な公式によって、ファイル ハンドル プールのパフォーマンスを最大にすることができます。具体的には、プールに割り当てることができるハンドルの最大数 (maxTotal) を計算する必要があります。以下の手順で maxTotal を計算します。

  1. サブテーブルの数が最も多いシームレス テーブルを探し、そのサブテーブル数 (#ofsub-tables) をメモします。
  2. 使用するスレッド数 (#ofthreads) を決めます。
  3. 公式は、(3 + (3 x #ofsub-tables)) x #ofthreads = maxTotal です。シームレス テーブルに .ind ファイルがない場合は、公式は (2 + (2 x #ofsub-tables)) x #ofthreads = maxTotal となります。

例えば、シームレスな米国テーブル全体を使用していて、.ind ファイルがあり、サブテーブル数が 54、使用スレッド数が 8 であるとします。この場合、maxTotal は (3 + (3 x 54)) x 8 = 1320 と計算されます。

注: これには潜在的な問題があり、使用している OS によってはオープン ファイル ハンドルが足りなくなる可能性があります。
注: 10 を超えるスレッドを使用する場合は、maxTotalPerKey の値を使用スレッド数まで増加させる必要があります。