ArcGIS Server で Web 上にマップを公開する方法の一つとして「マップ キャッシュ」があります。マップ キャッシュはサーバ側にあらかじめタイル状のイメージを作成しておくので、Web ブラウザや ArcGIS Desktop アプリケーションなどの各種クライアントからマップを要求したときに、より素早く表示することができます。
一方、サーバ管理者にとって、マップ キャッシュを作成するということは、何十万、何百万という数のイメージ ファイルを作成することになるので、以下のような問題に直面します。
・作成に時間がかかる(大きな CPUリソースを必要とする)
・大容量のディスク スペースを消費する
・ステージング環境から本番環境へのファイルの移動に時間がかかる
ArcGIS 10 では、これらの問題に対処するため「コンパクト キャッシュ」という形式が導入されました。以下にコンパクト キャッシュについて詳しく紹介します。
■コンパクト キャッシュとは
ArcGIS Server 9.x までのマップ キャッシュは、それぞれのタイルは個別のファイル(*.jpgや *.png など)として作成されていましたが、ArcGIS Server 10 から導入されたコンパクト キャッシュは、複数のファイルをひとまとめにした「バンドル ファイル(*.bundle)」 という形式で作成されます。1 つのバンドル ファイルには、128 × 128 タイル(16,384 タイル)が格納されます。
コンパクト キャッシュを利用すると以下のような利点があります。
1.ファイル数が少なくなるため、ステージング環境から本番環境へのデータの移動が短時間でできる
2.ディスク上のファイル サイズが削減されるため、ディスク スペースを節約できる
3.タイルを作成する際のディスク I/O が減るため、キャッシュ作成の処理能力が向上する
4.分散環境でのネットワーク負荷を軽減できるため、スケーラビリティが向上する
■コンパクト キャッシュの作成方法
コンパクト キャッシュを作成する方法は簡単です。キャッシュを作成する際に、格納形式から [コンパクト] を選択するだけです。
尚、[エクスプロード] を選択すると、従来の形式(バージョン 9.x)のキャッシュ(「エクスプロード キャッシュ」といいます)が作成できます。
■新しいキャッシュ作成の仕組み
コンパクト キャッシュをサポートするために、ArcGIS Server 10 では新しいキャッシュ作成の仕組みを採用しています。キャッシュを作成するために使用されるサービス インスタンス(ArcSOC.exe プロセス)には、バージョン 9.x で使用されているよりもより大きな範囲の領域が割り当てられます。
それぞれの ArcSOC.exe プロセスは、128 × 128 タイルの大きさの領域で処理しながら、次の領域へ移動します。より分かりやすくするために、このことを「バンドル」と呼んでいます。これはバンドル ファイルを作成する必要のない、エクスプロード キャッシュの場合も当てはまります。
キャッシュの作成中、各 ArcSOC.exe は 1 つのバンドルを処理し、それから次の利用可能なバンドルへ移動します。1 つの ArcSOC.exe プロセスが一度に処理できるバンドルは 1 つだけです。
バージョン 9.x では ArcSOC.exe プロセスが処理する単位は「スーパータイル」で、その大きさはバンドルよりも小さく 2,048 ×2,048 ピクセル(アンチエイリアスがない場合は 4,096 × 4,096 ピクセル)でした。処理の単位をバンドルに切り替えたことによってディスク I/O やネットワークの処理能力が最適化され、結果として非常に良いパフォーマンスが得られます。ArcSOC.exe プロセスの割り当ての変更頻度も少なくなり、タイルを作成する処理に集中できます。
分散環境では、共有キャッシュ ディレクトリにコピーする前に、サーバ上のローカル キャッシュ ディレクトリにバンドル ファイルを作成するように選択することによって、より良いパフォーマンスが得られます。
■キャッシュを更新する場合はバンドル全体が再作成されるか?
キャッシュを更新する場合、影響のあるバンドル全体を更新するわけではありません。前述したように ArcSOC.exe プロセスは処理する最小単位としてスーパータイルを使用しなくなりましたが、イメージをタイル状に切る前にサーバが描画するマップの領域を定義するために、依然としてスーパータイルが使用されます。フィーチャの境界に基づいてキャッシュを更新する際、フィーチャと交差するスーパータイルのみが再描画されるため、全体のバンドルは再描画されません。
※ 生成したファイルはスーパータイルの単位で示されています。
■バージョン 10 で時々キャッシュ作成に時間がかかるのはなぜか?
非常に小さいフィーチャの境界に基づいてキャッシュを作成している場合に、バージョン 9.x と比べてわずかにキャッシュの作成が遅くなることがあります。これは、使用可能な ArcSOC.exe プロセスの数よりもバンドルの数が少ないことがあるためです。例えば 8 つの ArcSOC.exe プロセスがキャッシュ作成のために使用可能であっても、境界に交差するバンドルが 1 つの場合、ArcSOC.exe プロセスは 1 つだけ使用されます。これは大きなキャッシュを作成する場合にキャッシュ作成ツールがより効率的に実行されるように改善されたこととのトレードオフとなります。
大きなキャッシュでこの状況を避けるための最善の方法は、利用可能な ArcSOC.exe プロセスよりも多くのバンドルを取り囲む、大きなフィーチャの境界に基づいてキャッシュすることです。
1 つのバンドルはどのぐらいの広さをカバーするのでしょうか?試算したところによると、1:4,096 の縮尺で、デフォルトのタイルサイズ(256 × 256 ピクセル)および解像度 96 dpi と仮定すると、1 つのバンドルは約 1,260 平方キロメートルとなります(投影による歪みは考慮しない)。
■エラー レポートの改善
バージョン 10 では、キャッシュの作成に失敗したときのメッセージもより詳細になりました。以下に例を示します。
Failed to manage tiles for the extent (1637201.673300, 9208620.018344, 2712470.490504, 10283888.835548) at level 1
このメッセージ内の数字は、キャッシュの作成に失敗したバンドルの四隅の座標(最小 X, 最小 Y, 最大 X, 最大 Y)と縮尺レベルを表しています。この情報を利用して、失敗の原因となった場所に存在するデータやレイヤを調べることができます。ArcSDE への接続が切れていたりネットワークに問題があったりすると、マップの描画中にエラーを引き起こす原因となり、その範囲のキャッシュ作成に失敗するかもしれません。
キャッシュの作成に失敗した部分を再作成する場合、単にその範囲と縮尺レベルのキャッシュ タイルを再作成することによって時間を節約できます。これを行うには、「マップ サービス キャッシュのタイルを管理(Manage Map Server Cache Tiles)」ジオプロセシング ツールを使用して、更新範囲にその境界座標を入力し、縮尺のところで適切な縮尺レベルをチェックします。
■テスト結果
ArcGIS Server 10 を使用して、エクスプロード キャッシュとコンパクト キャッシュの比較を行った結果を以下に示します。使用したデータは弊社のデータ製品「ArcGISデータコレクション プレミアムシリーズ 詳細地図」の関東(首都圏)版です。
※これはあくまでも参考値です。キャッシュを作成するために使用するハードウェアやネットワーク環境、およびArcGIS Server の構成によって処理時間は変わります。
もっとも顕著に差が見られたのは、ステージング環境から本番環境へキャッシュ ファイルを移動したときの時間です。短時間にデータの移動が可能となり、すばやく本番環境への移行が行えます。
■キャッシュの格納形式の変換
バージョン 9.x で作成したキャッシュは、エクスプロード キャッシュとしてそのままバージョン 10 で使用することができますが、今後の運用を考えた時にコンパクト キャッシュに移行したいと思うかもしれません。そのような場合は、「マップ サービス キャッシュの格納形式を変換(Convert Map Server Cache Storage Format)」ジオプロセシング ツールを使用します。このツールはエクスプロード キャッシュとコンパクト キャッシュを相互に変換することができます。格納形式を一旦変換すると、元のキャッシュ形式は削除されますのでご注意ください。