ArcGIS には、ユーザーのアクセスに応じてマップ キャッシュ タイルをオンデマンドで作成するオプションがあります。キャッシュされていないエリアに最初にアクセスしたユーザーは、該当する部分のタイルがサーバーによって描画されるまで待つ必要があります。これらのタイルはサービスのキャッシュ フォルダーに追加され、サーバー管理者によって更新または削除されるまでサーバー上に残ります。したがって、後からそのエリアにアクセスしたユーザーは、タイルが作成されるのを待たずに済みます。
オンデマンド キャッシュをうまく利用すれば、時間とディスク容量をかなり節約することができます。ほとんどのマップにおいて、大縮尺の (拡大表示されている) 場合は特に、マップ ユーザーにとって意味のない、使い道のない、あるいは興味のないエリアを表示します。オンデマンド キャッシュは、こうした必要のないタイルを作成して格納する作業を不要にすると同時に、ユーザーに必要なエリアのみを表示できるオプションを提供します。
オンデマンド キャッシュは便利な機能ですが、使い方を誤ったりむやみに使用したりすると、パフォーマンスを低下させることがあります。ここでは、オンデマンド キャッシュを最も効果的に使用するためのヒントを示します。
パフォーマンスの最適化
完全なマップ キャッシュの利点の 1 つは、きれいで複雑なマップを非常にすばやく提供できることです。これは、サーバーがマップのタイル イメージを提供するだけで済み、リクエストのたびにマップを描画する必要がないためです。一方、オンデマンド キャッシュを使用する場合は、ユーザーがキャッシュされていないエリアにアクセスしたときに、サーバーがタイルを動的に描画する必要があります。サーバーは一連のタイルを一度に作成するため、実際に、この動的な描画は通常のリクエストよりも時間がかかります。この一連のタイルの大きさは、マップ サービスがアンチエイリアスを使用している場合は 2048 x 2048 ピクセル、アンチエイリアスを使用していない場合は 4096 x 4096 ピクセルになります。
サーバーがタイルを 1 つずつ作成しないのはなぜでしょうか。そのようにすると、ラベリング エンジンが隣接するタイルに存在するラベルを見分ける方法がないので、重複するラベルが多数作成されてしまうためです。サーバーが一連のタイルを一度に作成するのはそのためです。サーバー管理者は広いエリアを適度な時間内で描画できるようにマップを作成しておく必要があります。このセクションでは、オンデマンド キャッシュのパフォーマンス コストを削減するための方法をいくつか紹介します。
オンデマンド キャッシュを使用する場所の決定
オンデマンド キャッシュを構築する際には、オンデマンドで作成するエリアと、事前にキャッシュしておくエリアを決定することが最も重要です。オンデマンド キャッシュを使ってキャッシュ全体を構築することは避けてください。最もアクセス頻度が高いと予想されるエリアのタイルは常にあらかじめ作成しておき、ユーザーがタイルをオンデマンドでリクエストすることによるサーバー リソースの消費を最小限に抑えてください。
マップにおいて最もアクセス頻度が高いエリアを判断するにはどうすればよいでしょうか。これは主に、マップの目的とユーザー層によって決まります。一般的なベースマップでは、地名、道路、海岸線、公園などの主要エリアに、他のエリアよりもアクセスが集中する可能性があります。
主題マップでは、アクセス頻度の高い場所の傾向が異なるかもしれません。たとえば、炭鉱会社が使用するマップの場合は、鉱物資源が最も豊富なエリアのアクセス頻度が最も高い可能性があります。これは、一般の人にとって重要でない非居住エリアや山岳エリアにも当てはまります。
事前にキャッシュしておくエリアを決定するためには、オンラインまたはデスクトップ上で、現在のマップの使用パターンを調べる必要があります。ユーザーのアクセス傾向とユーザーが検索するフィーチャをおおまかに調べてみるだけでも、さまざまな情報が得られます。
また、データの可用性と解像度も重要です。特定エリアのデータが不足している、または存在しない場合は、そうしたエリアのキャッシュを省略することができます。ユーザーがオンデマンドでタイルをリクエストしたとしても、表示するものがなければ、描画にそれほど時間はかかりません。
また、データがマップの目的に深く結び付いていることも考えられます。たとえば、輸送部門に勤務していて、道路や鉄道が密集しているエリアを事前にキャッシュしておくとします。[カーネル密度 (Kernel Density)] などの空間解析ツールは、関心の高いフィーチャが集中しているエリアを特定するのに役立ちます。
ユーザーが最も頻繁にアクセスするエリアを割り出した後、それらのエリアを分離するフィーチャクラスを作成する必要があります。[マップ サービス キャッシュのタイルを管理 (Manage Map Server Cache Tiles)] ツールを実行するときに、このフィーチャクラスを参照して、フィーチャクラスの境界内のタイルだけが作成されるようにします。
モデルまたはスクリプトで複数のツールを連結し、アクセス頻度の高い場所のフィーチャクラスを取得することもできます。モデルでは、アクセス頻度が高いことが予想されるさまざまなフィーチャを入力値として使用し、必要に応じてフィーチャからバッファーを作成するか、それらの密度を割り出します。最後に、出力で後処理を実行し、キャッシュ テンプレートに適したフィーチャクラスが得られるようにします。たとえば、[ポリゴンの単純化 (Simplify Polygon)] ジオプロセシング ツールを使用して、キャッシュ ツールの速度を低下させる過度に多い頂点を削除できます。
マップにおいてアクセス頻度の高いエリアを分離すればするほど、タイルをオンデマンドで作成するのではなく、キャッシュ済みのタイルで処理できるリクエストの数が増えていきます。大縮尺では、マップのほんの一部のキャッシュだけで、大半のユーザー リクエストに対処することができます。戦略的に追加の縮尺レベルをキャッシュとして保存するために、時間とディスク容量を使用することもできます。
マップのテストと最適化
多くの組織が所有する、もともとはデスクトップ上での GIS 操作に使用するためのものであったマップ ドキュメントは複雑です。多くの場合、Web ユーザーが期待するような応答時間を達成するためには、これらのマップを調整する必要があります。
マップを変更する前に、狭いエリアのテスト キャッシュを作成して、基準となる数値を割り出しておくとよいでしょう。都市部と農村部、平野部と山岳部など、マップ上で異なる地形がうまく組み合わされているエリアを選択します。テスト キャッシュを作成するのにかかった時間を記録してください。続いて、オンデマンド キャッシュを有効にし、キャッシュされていないエリアにズームします。さまざまな縮尺でタイルを表示するのにかかった時間を記録してください。この時点でパフォーマンスが許容レベルであれば、調整をする必要はありません。
オンデマンドでのタイル作成のパフォーマンスを向上させる、または全般的にキャッシュの作成速度を向上させるには、サービス エディターを使用して、マップでパフォーマンスを低下させているボトルネックを特定し、修正する必要があります。[解析] ボタン をクリックすると、潜在的なパフォーマンスの問題が検出され、報告されます。[プレビュー] ボタン をクリックすると、マップの描画速度を動的に確認できます。
より高度な方法でマップ サービスの非効率的なレイヤーを検出するには、サーバーのログ レベルを [冗長] に設定します。ArcMap でブックマークにズームするなど、マップ サービスへの描画リクエストを 1 つ作成します。次に、ArcGIS Server Manager で ArcGIS Server ログを調べ、各レイヤーの描画時間を確認します。描画に最も時間がかかっているレイヤーはすぐに特定できます。マップ上のエリアを無作為に選択し、さまざまなキャッシュの縮尺でこの作業を繰り返すことをお勧めします。作業が完了したら、ログ レベルを前のレベルに戻すことを忘れないでください。「冗長」レベルは、通常は必要とされない多くの情報を書き出します。
マップを最適化した後は、別のテスト キャッシュを作成し、タイルをオンデマンドで作成するのにかかった時間を記録します。パフォーマンスに依然として問題がある場合は、次のいずれかを実行することができます。
- より大きなエリアを事前にキャッシュします。 これにより、オンデマンド タイルが使用されることが少なくなります。最大縮尺では、オンデマンド キャッシュを最もアクセス頻度の少ないエリアに限定することができます。そうすれば、一度に多くのフィーチャを描画する必要がなくなります。
- 完全キャッシュを作成します。 すべてのタイルを事前にキャッシュすれば、タイルをオンデマンドで作成する必要がなくなります。このオプションは、完全キャッシュを作成するための時間とディスク容量があり、キャッシュが頻繁に更新されない場合に最も適しています。キャッシュ作成のサーバーのダウンタイムが心配である場合は、夜間や週末に実行するキャッシュ ジョブをプログラムとして作成し、キャッシュが完全になるまで着実に構築することができます。また、1 つのサービス インスタンスをキャッシュに割り当て、他のインスタンスにユーザー リクエストを処理させることもできます。
- 動的描画サービスを使用します。 完全キャッシュの構築が実現可能なオプションではなく、動的描画サービスのパフォーマンスが容認できるものである場合は、キャッシュの構築を完全に省略することもできます。このオプションでは、最適なパフォーマンスは提供されませんが、データは常に最新の状態に保たれます。
オンデマンドで作成されるステータス レポートとタイル
オンデマンドで作成されるマップ タイルは、ArcMap で表示されるキャッシュのステータス レポートには反映されないことに注意してください。ステータス レポートは、キャッシュ ツールを使用して作成したタイルだけを追跡します。
タイルの更新
ソース データベースを編集する際には、ユーザーが変更データを参照できるようにする前に、キャッシュを更新する必要があります。フィーチャクラスに基づいて特定のエリアを事前にキャッシュし、キャッシュの残りの部分は必要に応じて追加するという方法を採用する場合は、その更新に必要なエリアがすべて含まれるように注意する必要があります。
タイルをオンデマンドで作成している場合、キャッシュを更新するために選択できる手法として、次の 2 つがあります。
オンデマンドで作成したタイルをすべて削除してから更新を実行します
タイルをオンデマンドで作成している場合は、フィーチャクラスに基づいて特定のエリアを事前にキャッシュしているはずです。通常は、更新もそのフィーチャクラスに基づいて実行しますが、オンデマンド タイルを削除しなければ、それらは無効な古い情報となります。
タイルを削除するには、[マップ サービス キャッシュのタイルを管理 (Manage Map Server Cache Tiles)] ツールを [タイルの削除] モードで実行します。タイルは、事前にキャッシュしたときとは逆のフィーチャクラスに基づいて削除する必要があります。ArcGIS の編集ツールを使用して、マップの全範囲を表すポリゴンを作成し、事前にキャッシュされているエリアをホールとして切り取ります。結果として得られる「ドーナツ ポリゴン」が、タイルを削除する必要のあるエリアです。ArcMap で [クリップ] コマンドを使用してポリゴンでホールを切り取る方法については、「既存のポリゴンでのドーナツ ポリゴンの作成」をご参照ください。
また、キャッシュからタイルをすべて削除してから更新を開始することもできますが、キャッシュが大きい場合はオーバーヘッドが伴うことがあります。
更新のたびに特定の場所がオンデマンドでキャッシュされるまでユーザーが待たされることが気になる場合は、その場所を事前にキャッシュされるエリアに追加することを検討してください。事前にキャッシュする場所がうまく選択されていれば、オンデマンド キャッシュはマップのそれほど重要でないエリアでまれに発生するだけになるはずです。ユーザーがある場所にたびたびアクセスする場合は、その場所を事前にキャッシュしてください。
キャッシュの更新対象をデータが編集されたエリアに限定します
この操作を行う方法の 1 つは、ジオデータベースの履歴管理機能またはカスタム ツールを使用して、最後に更新された後の変更をすべて追跡し、変更されたエリアをフィーチャクラスにエクスポートして、フィーチャクラスの境界に基づいてタイルを更新することです。
編集が発生したエリアだけを更新することが確実であれば、オンデマンドで作成されたタイルをすべて削除する必要はありません。