6.10 イメージのピラミッド化: パラレル生成および部分更新
イメージのピラミッド化は、大規模なイメージ・データベースの構築に最もよく使用されるプロセスの1つです。
このトピックでは、ピラミッドのパラレル生成、ピラミッドの部分更新、バッチおよび同時処理などのいくつかの関連技術について説明します。
ピラミッドをより効率的に操作するため、ピラミッドをパラレルに生成することや、ピラミッドの部分更新を実行することができます。(この項では、読者が「ピラミッド」に説明されている概念を理解していると仮定します。)
例6-12 ピラミッドのパラレル生成
ピラミッドの生成を高速化するため、SDO_GEOR.generatePyramid
プロシージャでparallelParamパラメータを指定できます。例6-12で、並列度は4に設定されます。(ピラミッド生成のパフォーマンスが実際にどれぐらい向上するかは、Oracle Databaseで使用可能なCPUの数に応じて変化します。)
DECLARE
gr sdo_georaster;
BEGIN
SELECT georaster INTO gr
FROM georaster_table WHERE georid = 6 FOR UPDATE;
-- Generate pyramids.
sdo_geor.generatePyramid(gr, 'rLevel=5, resampling=NN', null, 'parallel=4');
-- Update the original GeoRaster object.
UPDATE georaster_table SET georaster = gr WHERE georid = 6;
COMMIT;
END;
/
ピラミッド生成のパラレル処理を有効化するには、SDO_GEOR.generatePyramidによって、暗黙的コミット操作を実行します。コール中にエラーが発生すると、GeoRasterオブジェクトは無効な状態になる可能性があります。それが発生した場合、SDO_GEOR.deletePyramidを使用して、GeoRasterオブジェクトで新しく生成された上位のピラミッド・レベルを削除します。
例6-13 ピラミッドの部分更新
SDO_GEOR.updateRasterプロシージャを使用して、ピラミッドを部分的に更新できます。例6-13では、指定した領域のターゲットGeoRasterオブジェクト(targetArea
がarea
として指定される)が、別のGeoRasterオブジェクトによって更新されます。updateUpperPyramids
パラメータはtrue
に設定されるため、ターゲットGeoRasterオブジェクトの上位のピラミッドは、指定した領域で部分的にのみ更新されます。つまり、上位のピラミッド・レベルは完全には再生成されませんが、そのtargetAreaのセルのみが再生成されるため、パフォーマンスが向上します。
DECLARE gr1 sdo_georaster; gr2 sdo_georaster; area sdo_number_array := sdo_number_array(-200,-50,201,162); BEGIN SELECT georaster INTO gr2 FROM georaster_table WHERE georid=0 FOR UPDATE; SELECT georaster INTO gr1 FROM georaster_table WHERE georid=1; SDO_GEOR.updateRaster(gr2, 0, null, area, gr1, 0, null, 'true'); UPDATE GEORASTER_TABLE SET georaster=gr2 WHERE georid=0; COMMIT; END; /
ピラミッド化プロセスを高速化および自動化する他の技術にはバッチ処理が含まれ、同時処理を使用できます。特定の領域の多くのイメージを一括してピラミッド化するには、「GeoRasterオブジェクトの問合せと検索」の例を参照してください。多くのバッチを同時に処理するため、異なるデータベース・セッションを開始できます。
親トピック: イメージ処理および仮想モザイク