Point in Polygon のバッチ処理とトランザクション処理

Point in Polygon のバッチ処理とトランザクション処理の概念は、リアルタイム環境において、すべてのポイント データとジオメトリ データが既に揃っているか、それともポイント データまたはジオメトリ データがステージに 1 つずつ入力されるかで、実質的な違いがあります。ポイントが実行時に決まり (顧客のクエリによって生成される保険契約の場所など)、ポリゴン データのみが存在するアプリケーションは、トランザクション処理の使用事例となります。これとは対照的に、バッチ処理の使用事例では、ポイント データとポリゴン データの両方がテーブルに保持されています。Location Intelligence モジュールには、Point in Polygon の使用事例を解決するためのステージとして、Query Spatial Data と Centrus Point In Polygon (Legacy Point In Polygon) の 2 つのステージがあります。各ステージは、Point in Polygon のバッチ処理またはトランザクション処理を実行する場合のパフォーマンスに違いがあります。Query Spatial Data ステージと Legacy Point In Polygon ステージの詳細については、以下を参照してください。

Point in Polygon のトランザクション処理の使用事例に対しては、Query Spatial Data ステージよりも Centrus Point In Polygon ステージの方が有効です。この Point In Polygon ステージの方が、リアルタイム データがステージに読み込まれる場合のパフォーマンスが高くなります。Query Spatial Data ステージが Centrus Point In Polygon ステージに勝るのは、バッチ処理とスケーラビリティにおいてです。Query Spatial Data は、ポイント データとポリゴン データの場所や、繰り返し操作を行うテーブルの種類に関して、より柔軟性があります。データの性質 (ポリゴンの複雑さや、ポイントとポリゴンの数など) を把握しているならば、最適なパフォーマンスが得られるようにフローを構成することができます。

Query Spatial Data のバッチ処理のフローと Point in Polygon のトランザクション処理のフローの両方の作成方法の例については、以下を参照してください。

使用可能なデータ形式データの種類と形式によっても、Spectrum でどちらの処理を使用するかが左右されます。Centrus Point in Polygon 処理は、GSB 形式のみをサポートします。Point in Polygon のトランザクション処理を実行する場合に、パフォーマンスが必要で、データが GSB 形式に変換可能であるならば、Centrus Point in Polygon の方が高速な実行方法になります。データの GSB 形式への変換は、パフォーマンスを上げるために必要な場合のみ行うことをお勧めします。他にも、ニーズに影響を与える可能性のある相違点があります。例えば、TAB ファイルは、複数の言語に対応し、より多くの座標系をサポートします。一方 GSB は、英語のみに対応し、サポートする座標系が限定されます。

Centrus Point in Polygon 処理を適用すればソリューションが改善されると判断し、データが GSB 以外の形式である場合は、既存データを GSB 形式に変換するためのユーティリティが Spectrum に含まれています。Spatial Import は、.SHP、TAB、.MIF/.MID、.DBF ファイルを Centrus データベース (.GSB) ファイルに変換するための Windows コマンドライン ユイティリティです。ようこそページの [Spectrum Spatial] セクションにある、[ユーティリティ] タブの [Spatial Import] からダウンロードできます。zip ファイルをダウンロードした後に、32 ビット版 (x86) と 64 ビット版 (x64) のどちらを使用するかが選択できます。このユーティリティの詳細については、Location Intelligence モジュール変換ユーティリティを参照してください。

注: データを GSB に変換したくない理由がある場合は (データの重複が心配など)、トランザクション処理の使用事例に対して Query Spatial Data を使用し、ネイティブな TAB ファイルか、空間データベース ソースに格納されたテーブル形式のデータにアクセスすることができます。

Query Spatial Data がバッチ処理に適切な理由前述のとおり、Query Spatial Data ステージは柔軟性が高く、より多くのパフォーマンス オプションを備えます。以下の 2 つのバッチ処理フローのシナリオを考えます (両者のポリゴンとポイントは同じであるとします)。

  1. Read Spatial Data で、ポイントのリストを TAB ファイルから読み込む (ポイント数は数百万個)

    Spatial Calculator で、ポイントから緯度列と経度列の値を作成する

    Centrus Point In Polygon ステージで、大規模なポリゴン集合 (GSB) に対してクエリを実行する

  2. Read Spatial Data で、大規模なポリゴン集合を TAB ファイルから読み込む

    Query Spatial Data で、ポイント テーブル (ポイント数は数百万個) に対して contains (次を含む) フィルタを適用する

この 2 つのシナリオに対して、プール サイズが 1 で実行時インスタンスが 1 の場合、Centrus Point In Polygon (シナリオ 1) の方が Query Spatial Data (シナリオ 2) よりも高速になります。プール サイズと実行時インスタンスを増やすと、シナリオ 1 のパフォーマンスは一定であるのに対し、シナリオ 2 のパフォーマンスは効果的に向上します。プール サイズが 4 で実行時インスタンスが 4 になると、Query Spatial Data の方が Centrus Point In Polygon よりも高速になります。すべてのポイントとポリゴンが事前に揃っており、すべてのジオメトリを処理する必要のあるバッチ処理に対しては、Query Spatial Data ステージを使用する 2 つめのシナリオの方が格段に有効です。ポリゴン データが変化せず、ポイントが 1 つずつ入力される場合 (ユーザが住所を入力し、それがジオコーディングされてから、その住所がどの販売区域に含まれるかが判断される場合など) は、Centrus Point In Polygon ステージを使用する方が高速な方法となります。

パフォーマンスに関するその他の検討事項Query Spatial Data を使用する際には、処理するポイントとポリゴンの数を考慮する必要があります。ポリゴンの方がポイントよりも多い場合は、ポイントで繰り返し処理を行う (Read Spatial Data を使用してポイントを 1 つずつ読み取り、Query Spatial Data を使用してポリゴン テーブルを検索する) ことを検討してください。ポイントの方がポリゴンよりも多い場合は、ポリゴンで繰り返し処理を行う (Read Spatial Data を使用してポリゴンを 1 つずつ読み取り、Query Spatial Data を使用してポイント テーブルを検索する) ことを検討してください。

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

SELECT a.id, b.id FROM flood_plane a, customers b WHERE MI_Contains(a.geom, b.geom)
注: 両方のテーブルがネイティブな TAB ファイルである (データベースにデータはない) 場合にこの操作を実行するには、一方のテーブルからレコードを 1 つずつ読み取り、Query Spatial Data を使用して他方のテーブルにクエリを実行する方がパフォーマンスが高くなります。

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

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