ルーティング・エンジンでは、ルーティング・エンジン・データとユーザー・データを使用します。ルーティング・エンジン・データは、EDGE、NODE、SIGN_POSTおよびPARTITION表に格納されます。
ルーティング・エンジン・データは、道路ネットワークをノードとエッジの方向付きグラフとしてモデル化します。パーティション化により、この道路ネットワークが2**N (2N)個のサブグラフ(ローカル・パーティション)と1つの高速道路パーティションに分割されます。道路ネットワークのノードはトポロジによりパーティション化されるため、各ローカル・パーティションには同じ数のノードが含まれます。ネットワーク内の各ノードは、1つのパーティションだけに必ず存在します。エッジは、1つのパーティションに完全に含まれる内部エッジまたは2つのパーティションのブリッジ(境界エッジ)にすることができます。パーティションはデータベースにBLOBとして格納されるため、キャッシュから簡単に読取りおよび削除できます。これにより、ルーティング・エンジンは道路ネットワーク全体がメモリーになくても動作できます。
パーティション1からNのローカル・パーティションは、すべてほぼ同じサイズです。ローカル・パーティションは、ルートの計算時に必要に応じてキャッシュに読み込まれます。これらのパーティションは、キャッシュが一杯になるまでキャッシュに残り、キャッシュが一杯になると、最も使用頻度の低いパーティションがスワップ・アウトされて、現在のルートの計算に必要なパーティション領域を解放します。
パーティション0 (ゼロ)は高速道路パーティションであり、2つの点でローカル・パーティションと異なります。
道路ネットワークのトポロジ・パーティションではありません。高速道路情報のみを含む、道路ネットワークのサブグラフです。このため、高速道路パーティションはローカル・パーティションよりはるかに大きくなります。
ルーティング・エンジンの起動時にキャッシュに読み込まれ、常駐します。
道路ネットワークは3つのフェーズでパーティション化されます。最初のフェーズではデータをパーティション化し、必要なパーティションの数と、どのパーティションにノードおよびエッジが含まれるかを計算します。2番目のフェーズでは、これらのパーティションをBLOBに変換し、これらをデータベースに書き込みます。最後のフェーズでは、ルーティング・エンジン・ネットワークを再構築し、ユーザー・データをパーティション化し、ユーザー・データBLOBをデータベースに書き込みます。
ルーティング・エンジン・データはバージョン管理されます。パーティション化の第3フェーズ中に、ルーティング・エンジン・バージョンがSDO_ROUTER_DATA_VERSION表に書き込まれ、このデータ・セットのデータ・バージョンになります。別のルーティング・エンジン・スキーマで使用するためにデータ・セットがエクスポートされる場合、この新しいルーティング・エンジンのバージョンはデータ・セットのデータ・バージョンと互換である必要があります。
ルーティング・エンジン・データは、Oracle Data Format (ODF)でデータ・ベンダーによって提供され、すでにパーティション化されています。一般に、顧客がデータを再パーティション化する必要はありません。ただし、異なるパーティション・サイズのパフォーマンス・テストやデータ・セットのマージを行う場合など、ルーティング・エンジン・データを再パーティション化することが必要な場合もあります。
注意:
ルーティング・エンジン・データの再パーティション化は、時間とリソースを非常に要する操作です。使用されるハードウェアによっては、北米やEUなどの大きなデータ・セットの再パーティション化の実行に1日以上かかることも少なくありません。
この項には次のトピックが含まれます:
構文:
SDO_ROUTER_PARTITION.PARTION_ROUTER( LOG_FILE_NAME IN VARCHAR2 := 'sdo_router_partition.log', MAX_V_NO IN NUMBER DEFAULT 10000, DRIVING_SIDE IN VARCHAR2 := 'R', NETWORK_NAME IN VARCHAR := 'ROUTER_NETWORK', MAX_MEMORY IN NUMBER := 1.75, CLEANUP IN BOOLEAN DEFAULT TRUE, USE_SECUREFILES IN BOOLEAN DEFAULT TRUE, GENERATE_11G_RESTRICTIONS IN BOOLEAN DEFAULT TRUE);
PARTITION_ROUTERプロシージャは、ルーティング・エンジンOracle Data Formatデータを含むルーティング・エンジン・スキーマから実行する必要があります。このプロシージャは、道路ネットワークをパーティション化し、ルーティング・エンジン・データをBLOB形式で含んだPARTITION表を作成します。
LOG_FILE_NAMEパラメータでは、ルーティング・エンジンのパーティション化時に書き込まれるログ・ファイルの名前を指定します。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ユーザーは、ログ・ファイルの名前を選択するか、デフォルトのパーティション・ログ・ファイルsdo_router_partition.logを使用するかを選択できます。
MAX_V_NOパラメータでは、1つのパーティション内で許可される最大ノード数を指定します。NODE表には、少なくとも(MAX_V_NO+1)のノードが存在する必要があります。
DRIVING_SIDEパラメータは、レガシー・パラメータです。その用途は、リリース11gの右左折制限を生成することだけです。有効値はR (右側)とL (左側)です。NETWORK_NAMEパラメータでは、パーティション化の際に作成されるルーティング・エンジン・ネットワークの名前を指定します。
MAX_MEMORYパラメータでは、パーティション化プロセスで使用できる最大Javaヒープ・サイズをGB単位で指定します。ほとんどのデータ・セットではデフォルト値の1.75Gで十分です。このパラメータは、標準よりも大幅に小さいまたは大幅に大きいデータ・セットをパーティション化する場合にのみ調整する必要があります。
CLEANUPパラメータはデバッグに使用されます。デフォルトでは、ルーティング・エンジン・データのパーティション化中に作成されるすべての中間表がクリーンアップされます。パーティション化中に問題が発生する場合は、これらの表をそのまま残す(CLEANUP=>FALSEを指定する)と、かなりのデバッグ情報を提供できます。
USE_SECUREFILESパラメータでは、ルーティング・エンジンのBLOBをBASICFILEまたはSECUREFILE形式で作成できます。SECUREFILEフォーマットの使用をお薦めします。
GENERATE_11G_RESTRICTIONSパラメータでは、リリース11gの右左折制限データの生成を制御します。Oracle Databaseリリース11gでは、基本的な右左折制限が実装され、PARTITION表に格納されました。Oracle Databaseリリース12cでは、右左折制限が拡張され、ユーザー・データ表ROUTER_TURN_RESTRICTION_DATAに格納されます。データ・プロバイダがまだリリース11g Route Serverを使用しているユーザーにリリース12cでパーティション化されたデータを提供できるようにするために、両方のタイプの右左折制限がデフォルトで生成されます。リリース12c Route Server用にOracleリリース12cでデータを再パーティション化する場合は、このパラメータをFALSEに設定できます。
構文:
SDO_ROUTER_PARTITION.CLEANUP_ROUTER( ALL_TABLES IN BOOLEAN DEFAULT TRUE);
CLEANUP_ROUTERプロシージャは、ルーティング・エンジンの状態をリセットして、すべての表および索引が適切な順序になり、すべての中間表が削除されるようにします。これは、パーティション化が失敗した場合、またはCLEANUPフラグがFALSEに設定されたパーティション化が正常に完了した場合に役立ちます。
ALL_TABLESパラメータでは、リセットする対象を制御します。FALSEに設定されている場合、ルーティング・エンジンは安定した状態にリセットされますが、中間表はデバッグ目的で残されます。これはパーティション化が失敗した場合に役立つことがあります。TRUEに設定されている場合、ルーティング・エンジンは安定した状態にリセットされ、パーティション化で使用されたすべての中間表が削除されます。これは、CLEANUPパラメータをFALSEに設定して実行されたPARTITION_ROUTERプロシージャが正常に終了した後のクリーンアップに役立つことがあります。
構文:
DUMP_PARTITIONS( LOG_FILE_NAME IN VARCHAR2 := 'sdo_router_partition.log', START_PID IN NUMBER DEFAULT 0, END_PID IN NUMBER DEFAULT -1, VERBOSE IN BOOLEAN DEFAULT FALSE);
DUMP_PARTITIONSプロシージャは、ルーティング・エンジン・データ・パーティションBLOBの内容をダンプします。このプロシージャは、BLOBをアンパックし、データを書式設定してログ・ファイルに書き込みます。このプロシージャを1回実行して、単一のパーティションまたは連続するパーティション範囲をダンプできます。この範囲はSTART_PIDからEND_PIDまでと定義されます。デフォルトでは、すべてのパーティションがダンプされます。連続するパーティション範囲を1回のコールでダンプすることはできません。
LOG_FILE_NAMEパラメータは、ルーティング・エンジンのパーティションをダンプする際に書き込まれるログ・ファイルの名前です。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ログ・ファイルの名前を選択するか、デフォルトのパーティション・ログ・ファイルsdo_router_partition.log
に書き込むことができます。
START_PIDパラメータは、最初にダンプするパーティションのIDです。デフォルトのSTART_PIDは0です。START_PIDはEND_PID以下である必要があります。
END_PIDパラメータは、ダンプする最後のパーティションのIDです。デフォルトのEND_PIDは-1で、これはデータ・セット内の最大のパーティションIDに変換されます。開始と終了のPID値が等しい場合は、単一のパーティションがダンプされます。END_PIDがSTART_PIDよりも小さい場合は、ログにエラー・メッセージが書き込まれます。
VERBOSEパラメータでは、どのデータがダンプされるかを制御します。デフォルト値のFALSEでは、ノードとエッジの数およびBLOBのサイズを含む、パーティション情報のサマリーがダンプされます。このパラメータをTRUEに設定した場合は、サマリーに加えて、パーティション内のすべてのノードおよびエッジを説明する情報がすべてダンプされます。
構文:
VALIDATE_PARTITIONS( LOG_FILE_NAME IN VARCHAR2 := 'sdo_router_partition.log', START_PID IN NUMBER DEFAULT 0, END_PID IN NUMBER DEFAULT -1, VERBOSE IN BOOLEAN DEFAULT FALSE);
VALIDATE_PARTITIONSプロシージャでは、ルーティング・エンジン・データ・パーティションBLOBの内容を検証します。大きなデータセット内のすべてのパーティションの検証は実行に時間がかかる場合がありますが、これはすべてのパーティション内のすべてのバイトを読み取ってパーティションをルーティングに使用する準備ができていることを確認するための最も速い方法です。検証を実行する必要があるのは、パーティションに問題があると疑われる場合のみです。検証が実行される場合は、VERBOSEフラグをFALSEに設定してすべてのパーティションで初期検証を実行することをお薦めします。問題が見つかった場合は、VERBOSEをtrueに設定し、問題のパーティションに対して検証を再実行してください。
LOG_FILE_NAMEパラメータは、ルーティング・エンジンのデータ・パーティションを検証する際に書き込まれるログ・ファイルの名前です。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ログ・ファイルの名前を選択するか、デフォルトのパーティション・ログ・ファイルsdo_router_partition.log
に書き込むことができます。
START_PIDパラメータは、最初に検証するパーティションのIDです。デフォルトのSTART_PIDは0です。START_PIDはEND_PID以下である必要があります。
END_PIDパラメータは、検証する最後のパーティションのIDです。デフォルトのEND_PIDは-1で、これはデータ・セット内の最大のパーティションIDに変換されます。開始と終了のPID値が等しい場合は、単一のパーティションが検証されます。END_PIDがSTART_PIDよりも小さい場合は、ログにエラー・メッセージが書き込まれます。
VERBOSEパラメータでは、検証メッセージの詳細度を制御します。デフォルト値のFALSEでは、パーティションの検証が成功したか失敗したかがログに記録されます。このパラメータがTRUEに設定されている場合は、BLOBの各要素の検証がログに記録されます。
構文:
GET_VERSION( LOG_FILE_NAME IN VARCHAR2 := 'sdo_router_partition.log');
GET_VERSIONプロシージャは、SDO_ROUTER_DATA_VERSION表を問い合せてルーティング・エンジン・データのバージョンを取得し、結果をログ・ファイルに書き込みます。(別の方法として、SQLを使用してSDO_ROUTER_DATA_VERSION表を問い合わせることもできます。)
LOG_FILE_NAMEパラメータは、ルーティング・エンジン・データのバージョンが書き込まれるログ・ファイルの名前です。このログ・ファイルはSDO_ROUTER_LOG_DIRディレクトリに作成されます。ログ・ファイルの名前を選択するか、デフォルトのパーティション・ログ・ファイルsdo_router_partition.log
に書き込むことができます。
この項には、次の例が記載されています。
例E-1に、小さいデータ・セットのパーティション化を示します。この例のデータ・セットは、San Franciscoの中心から半径100マイルの道路ネットワーク・データです。このデータ・セットには、約520,000個のノードと1,200,00個のエッジが含まれます。ルーティング・エンジン・データをパーティション化するには、ルーティング・エンジン・スキーマから文を実行します。
例E-1 小さいデータ・セットのパーティション化
EXECUTE SDO_ROUTER_PARTITION.PARTITION_ROUTER( 'sdo_router_partition.log', 1000, 'R', 'ROUTER_SF_NET', .75, FALSE, FALSE, FALSE); ******** Beginning SDO Router partitioning ** Schema: ROUTER_SF_SCHEMA ** Logfile location:/scratch/logs/sdo_router_partition.log ** Nodes per partition: 1000 ** Driving side: R ** Router network name: ROUTER_SF_NET ** Max JVM Memory Size: .75GB (805306368 bytes) ** Cleanup temporary files: FALSE ** BLOBs stored in BASICFILE format ** Generating 11g turn restrictions: FALSE [This header is followed by extensive logging of the partitioning process.]
この例では、1,025個のパーティション、1個の高速道路パーティションおよび1,024個のローカル・パーティションが生成されます。パーティション当たり平均516個のノードがあります。走行側が設定されますが、リリース11gの右左折制限はリクエストされていないため使用されません。Javaの最大ヒープ・サイズは、このような小さいデータ・セットに十分な4分の3GBに設定されます。パーティションBLOBはBasicfile形式で書き込まれ、パーティション化の完了時に中間表はクリーンアップされていません。
パーティション化で残された中間表をクリーンアップするには、次のように入力します。
EXECUTE SDO_ROUTER_PARTITION.CLEANUP_ROUTER()
例E-2に、完全データ・セットのパーティション化を示します。この例のデータ・セットは、北米の道路ネットワーク全体です。このデータ・セットには、約3,000万個のノードと7,400万個のエッジが含まれます。ルーティング・エンジン・データをパーティション化するには、ルーティング・エンジン・スキーマから文を実行します。
例E-2 完全データ・セットのパーティション化
EXECUTE SDO_ROUTER_PARTITION.PARTITION_ROUTER( 'sdo_router_partition.log, 32000, 'R', 'ROUTER_NA_NET'); ******** Beginning SDO Router partitioning ** Schema: ROUTER_NA_SCHEMA ** Logfile location:/scratch/logs/sdo_router_partition.log ** Nodes per partition: 32000 ** Driving side: R ** Router network name: ROUTER_NA_NET ** Max JVM Memory Size: 1.75GB (1879048192 bytes) ** Cleanup temporary files: TRUE ** BLOBs stored in SECUREFILE format ** Generating 11g turn restrictions: TRUE [This header is followed by extensive logging of the partitioning process.] ++ Partitioning a data set of this size is time and resource intensive ++
この例では、1,025個のパーティション、1個の高速道路パーティションおよび1,024個のローカル・パーティションが生成されます。パーティション当たり平均29,443個のノードがあります。走行側は"右側"に設定され、リクエストされたOracle 11g右左折制限の生成に使用されます。デフォルトのJavaヒープ・サイズの1.75GBが使用されます。すべてのルーティング・エンジン・データおよびユーザー・データBLOBはSECUREFILE形式で格納され、すべての中間表はパーティション化が正常終了した後にクリーンアップされます。
例E-3に、San Franciscoデータ・セットからの、デフォルトのVERBOSE値(FALSE)が設定されたパーティション0から3のダンプを示します。BLOBサイズは、高速道路パーティションとローカル・パーティションとで異なります。高速道路パーティションは完全に自己包含であるため、アウトバウンド・エッジはないことにも注意してください。ローカル・パーティションには、他のローカル・パーティションに接続する出発エッジがあります。
例E-3 パーティションの内容のダンプ(VERBOSE = FALSE)
EXEC SDO_ROUTER_PARTITION.DUMP_PARTITIONS( 'dump_part0-3.log', 0, 3); ******** Beginning partition dump ** Logfile location: /scratch/logs/dump_part0-3.log ** Routeserver data version: 12.1.0.2.1 ** Start partition id: 0 ** End partition id: 3 ** Verbose mode: FALSE [INFO] Starting dump of partition 0 Number of Nodes: 19392 Number of Nonboundary Edges: 22706 Number of Outgoing Boundary Edges: 0 Number of Incoming Boundary Edges: 0 Stored Partition ID: 0 Blob Length: 1748332 [INFO] Starting dump of partition 1 Number of Nodes: 516 Number of Nonboundary Edges: 1190 Number of Outgoing Boundary Edges: 49 Number of Incoming Boundary Edges: 49 Stored Partition ID: 1 Blob Length: 81372 [INFO] Starting dump of partition 2 Number of Nodes: 516 Number of Nonboundary Edges: 1099 Number of Outgoing Boundary Edges: 68 Number of Incoming Boundary Edges: 68 Stored Partition ID: 2 Blob Length: 78388 [INFO] Starting dump of partition 3 Number of Nodes: 516 Number of Nonboundary Edges: 1101 Number of Outgoing Boundary Edges: 60 Number of Incoming Boundary Edges: 60 Stored Partition ID: 3 Blob Length: 77756
例E-4 パーティションの内容のダンプ(VERBOSE = TRUE)
例E-4に、San Franciscoデータ・セットからの、VERBOSEがTRUEに設定されたパーティション8のダンプを示します。アウトバウンド・エッジは終了するパーティションIDをログに記録し、インバウンド・エッジは開始するパーティションIDをログに記録します。
EXEC SDO_ROUTER_PARTITION.DUMP_PARTITIONS( 'dump_part8.log', 8, 8, TRUE); ******** Beginning partition dump ** Logfile location:/scratch/logs/dump_part8.log ** Routeserver data version: 12.1.0.2.1 ** Start partition id: 8 ** End partition id: 8 ** Verbose mode: TRUE [INFO] Starting dump of partition 8 Number of Nodes: 517 Number of Non-boundary Edges: 1145 Number of Outgoing Boundary Edges: 37 Number of Incoming Boundary Edges: 37 Stored Partition ID: 8 Blob Length: 77957 Node information for partition 8: Node ID/X/Y/Highway: 84096388/-120.50809/37.98399/false In Edges(3): -120862233, -120862227, 120862232 Out Edges(3): -120862232, 120862227, 120862233 ******************************* Node ID/X/Y/Highway: 84098023/-120.4882/37.99961/true In Edges(3): -127829801, -120428259, 776737023 Out Edges(3): -776737023, 120428259, 127829801 ******************************* *** Node information for the other 515 nodes... Non-boundary Edge information for partition 8: Internal Edges(1145): Edge ID/Start Node ID/End Node ID: 910681077/942981443/206194644 Length/Speed Limit/Function Class: 130.3/5/5 ******************************* Edge ID/Start Node ID/End Node ID: -105461005/206194651/206194644 Length/Speed Limit/Function Class: 229.93/11/5 ******************************* *** Edge information for the other 1143 internal edges... Outbound Boundary Edges(37): Edge ID/Start Node ID/End Node ID: -724019630/253265936/810705655 End Node Partition ID/Length: 7/511.07 Speed Limit/Function Class: 26/2 ******************************* Edge ID/Start Node ID/End Node ID: -105462459/252152310/206193109 End Node Partition ID/Length: 7/814.68 Speed Limit/Function Class: 11/5 ******************************* *** Edge information for the other 35 outbound boundary edges... Inbound Boundary Edges(37): Edge ID/Start Node ID/End Node ID: 724019630/810705655/253265936 Start Node Partition ID/Length: 7/511.07 Speed Limit/Function Class: 26/2 ******************************* Edge ID/Start Node ID/End Node ID: 105462459/206193109/252152310 Start Node Partition ID/Length: 7/814.68 Speed Limit/Function Class: 11/5 ******************************* *** Edge information for the other 35 inbound boundary edges...
例E-5に、デフォルトのVERBOSE値(FALSE)が設定された、データ・セット内のすべてのパーティションの内容の検証を示します。
例E-5 パーティションの内容の検証(VERBOSE = FALSE)
EXEC SDO_ROUTER_PARTITION.VALIDATE_PARTITIONS( 'validate_all_partitions.log'); ******** Beginning partition validation ** Logfile location:/scratch/logs/validate_all_partitions.log ** Routeserver data version: 12.1.0.2.1 ** Start partition id: 0 ** End partition id: 1024 ** Verbose mode: FALSE [INFO] Starting validation of partition 0 [INFO] Starting validation of partition 1 [INFO] Starting validation of partition 2 … [INFO] Starting validation of partition 1022 [INFO] Starting validation of partition 1023 [INFO] Starting validation of partition 1024 [INFO] Partition validation complete
例E-6 パーティションの内容の検証(VERBOSE = TRUE)
例E-6に、VERBOSEがTRUEに設定されたパーティション7および8の内容の検証を示します。
EXEC SDO_ROUTER_PARTITION.VALIDATE_PARTITIONS( 'validate_part7-8.log', 7, 8, TRUE); ******** Beginning partition validation ** Logfile location: /scratch/logs/validate_part7-8.log ** Routeserver data version: 12.1.0.2.1 ** Start partition id: 7 ** End partition id: 8 ** Verbose mode: TRUE [INFO] Starting validation of partition 7 Header node count: OK Header edge count: OK BLOB partition id: OK BLOB length: OK BLOB node count: OK BLOB information for 516 nodes: OK BLOB information for 1154 internal edges: OK BLOB information for 66 outbound boundary edges: OK BLOB information for 65 inbound boundary edges: OK [INFO] Starting validation of partition 8 Header node count: OK Header edge count: OK BLOB partition id: OK BLOB length: OK BLOB node count: OK BLOB information for 517 nodes: OK BLOB information for 1145 internal edges: OK BLOB information for 37 outbound boundary edges: OK BLOB information for 37 inbound boundary edges: OK [INFO] Partition validation complete
例E-7では、ルーティング・エンジン・データのバージョン番号を問い合せて、結果をログ・ファイルに書き込みます。
SELECT * FROM sdo_router_data_version;
例E-7 ルーティング・データのバージョンの問合せ
EXEC SDO_ROUTER_PARTITION.GET_VERSION('version.log'); INFO: Routeserver data version: 12.1.0.2.1
かわりに、次のSQL問合せを使用して、ルーティング・エンジン・データのバージョンを取得することもできます。