PostGIS vs. ArcSDE: Тест PostGIS

Продолжаем сагу о тестировании.

Прежде чем переходить к описанию теста и его результатам, скажу несколько слов о тестовой платформе.

CPU: Intel Core2 Duo E6550@2.33Ghz

RAM: Samsung PC2-4200 (2x1Gb) dual channel

Motherboard: Asus P5K SE (чипсет Intel P35)

Video: NVIDIA GeForce 8500GT 512 Mb

HDD:

  1. Hitachi DeskStar HDT725032VLA360 (320 Gb). Разбит на два раздела 10Gb — система, все остальное под данные
  2. Hitachi DeskStar HDS721680PLA380 (80 Gb). Один раздел на всю емкость.

OS: Windows XP Pro SP3

Само тестирование проходило в соответствии с инструкциями Матеуша. При формировании SQL-представления растра результирующий sql-файл писался на второй диск, а перед загрузкой переносился на диск с данными. После каждого этапа тестов диски дефрагментировались средствами ОС и машина перезагружалась.

В качестве тестового растра выбрали вот этот ландсат. Достаточно подробная информация о снимке есть в файле N-38-45.met, который лежит рядом с ним, а частично урезанный вывод gdalinfo даю ниже:

Driver: MrSID/Multi-resolution Seamless Image Database (MrSID)
Files: d:\wktraster_test\N-38-45.sid
Size is 42962, 39235
Origin = (193892.625000000000000,5543955.125000000000000)
Pixel Size = (14.250000000000000,-14.250000000000000)
IMAGE__INPUT_FILE_SIZE=5086292652.000000
IMAGE__TARGET_COMPRESSION_RATIO=29.999998
IMAGE__BITS_PER_SAMPLE=8
IMAGE__COMPRESSION_WEIGHT=2.000000
IMAGE__COMPRESSION_GAMMA=1.000000
IMAGE__COMPRESSION_BLOCK_SIZE=4096
Band 1 Block=1024x128 Type=Byte, ColorInterp=Red
Minimum=0.000, Maximum=242.000, Mean=101.223, StdDev=35.192
Overviews: 21481x19618, 10741x9809, 5371x4905, 2686x2453, 1343x1227, 672x614, 336x307, 168x154
Band 2 Block=1024x128 Type=Byte, ColorInterp=Green
Minimum=0.000, Maximum=242.000, Mean=126.427, StdDev=33.576
Overviews: 21481x19618, 10741x9809, 5371x4905, 2686x2453, 1343x1227, 672x614, 336x307, 168x154
Band 3 Block=1024x128 Type=Byte, ColorInterp=Blue
Minimum=0.000, Maximum=252.000, Mean=105.329, StdDev=29.924
Overviews: 21481x19618, 10741x9809, 5371x4905, 2686x2453, 1343x1227, 672x614, 336x307, 168x154

Перед началом тестирования с системы был снят образ, все диски прошли дефрагментацию средствами ОС. Исходные данные (т.е. растр) располагаются на втором разделе 320 Гб диска.

К сожалению, и GDAL, и, соответственно, WKT Raster пока не имеют полноценной поддержки формата MrSID, поэтому растр был сконвертирован в формат ERDAS IMAGINE (*.img) вот такой командой

gdal_translate.exe -of HFA N-38-45.sid N-38-45.img

На конвертацию GDAL потребовалось 1160 с (~19 мин.), результирующий файл занял ~4.7 Гб на диске. Именно над этим файлом и выполнялись все последующие операции. Растр у нас есть, теперь нужно построить пирамиды (overviews), которых изначально в нашем файле нет.

gdaladdo -r average N-38-45.img 2 4 8 16 32 64 128

Для выполнения этой команды потребовалось 1057 с (~17 мин.). При помощи gdalinfo убеждаемся, что овервью успешно созданы

Band 1 Block=64x64 Type=Byte, ColorInterp=Undefined
Description = Layer_1
Overviews: 21481x19618, 10741x9809, 5371x4905, 2686x2453, 1343x1227, 672x614, 336x307
Metadata:
LAYER_TYPE=athematic
Band 2 Block=64x64 Type=Byte, ColorInterp=Undefined
Description = Layer_2
Overviews: 21481x19618, 10741x9809, 5371x4905, 2686x2453, 1343x1227, 672x614, 336x307
Metadata:
LAYER_TYPE=athematic
Band 3 Block=64x64 Type=Byte, ColorInterp=Undefined
Description = Layer_3
Overviews: 21481x19618, 10741x9809, 5371x4905, 2686x2453, 1343x1227, 672x614, 336x307
Metadata:
LAYER_TYPE=athematic

Теперь можно и подготовить растр к загрузке в базу. Подготовка состоит в том, что при помощи Python-скрипта gdal2wktraster.py (идет в комплекте с WKTRaster) генерируется sql-файл с дампом растра:

gdal2wktraster.py -r N-38-45.img -t N_38_45_img_rb_128 -o N_38_45_img_rb_128.sql --index --srid 32638 -k -m 128x128 -O -M -v

Процесс этот достаточно длительный, так что запаситесь чаем/кофе. На моей тестовой платформе на это ушло 2904 с (~48 мин). По окончанию работы скрипт выдал отчет о проделанной работе, по которому видно сколько таблиц будет создано в базе после загрузки скрипта и сколько тайлов (блоков) будет в каждой таблице:

------------------------------------------------------------
Summary of GDAL to WKT Raster processing:
------------------------------------------------------------
Number of processed raster files: 1
List of generated tables (number of tiles):
1 N_38_45_img (103152)
2 o_2_N_38_45_img (25872)
3 o_4_N_38_45_img (6468)
4 o_8_N_38_45_img (1638)
5 o_16_N_38_45_img (420)
6 o_32_N_38_45_img (110)
7 o_64_N_38_45_img (30)
8 o_128_N_38_45_img (9)

Результаты работы gdal2wktraster.py были записаны в файл N_38_45_img_rb_128.sql, который занял на диске… держитесь крепче :-)… 13 564 596 564 байт (~12.6 Гб). Вот так вот.

Т. к. все необходимые приготовления были проделаны на этапе настройки PostGIS, осталось только загрузить этот монстрообразный скрипт в базу:

psql -f N_38_45_img_rb_128.sql -U postgres -d postgis

Загрузка заняла 1952 с (~32 мин.), кластер БД вырос в размере с 38 748 476 байт (~36.9 Мб) до 7 283 127 972 байт (~6.78 Гб).

Тестирование PostGIS окончено, переходим к ArcSDE.