Пространственные индексы, создаваемые приложением DB2 Spatial Extender

Чтобы предоставить приложениям возможность выполнять запросы географических данных, которые содержит пространственный столбец, приложение IBM DB2 Spatial Extender предлагает пространственный индекс с трехуровневой сеткой.

Двухмерный пространственный индекс отличается от обычного иерархического индекса B-дерева, предоставляемого DB2. Индекс B-дерева, возможно, не будет применяться к пространственному столбцу, так как для двухмерных свойств этого столбца требуется структура пространственного индекса. По той же причине пространственный индекс может не действовать в отношении непространственного столбца и не применяться к составному столбцу любого вида.

Поэтому синтаксис CREATE INDEX пространственного индекса включает в себя дополнительный оператор USING, который направляет DB2 для использования пространственного индекса Spatial Extender вместо индекса B-дерева. Полный синтаксис выглядит следующим образом:

CREATE INDEX <index_name> 
ON <table> (<spatial column>)
USING db2gse.spatial_index (<grid level 1>, [grid level 2], [grid level 3])

Добавление оператора USING отличает пространственный индекс от индекса B-дерева. Имя схемы db2gse должно соответствовать имени расширения spatial_index, так как эта инструкция не подчиняется текущему пути функции.

Вследствие простой сущности данных, которые призвано индексировать B-дерево, разработчику базы данных требуется лишь направить DB2 для создания индекса в одном или нескольких столбцах таблицы. Но поскольку пространственные данные являются составными объектами, разработчику требуется понимать распределение их относительных размеров. Он должен определить оптимальный размер и число уровней иерархии пространственного индекса.

Уровни иерархии ([grid level 1], [grid level 2], [grid level 3]) вводятся по возрастанию размера ячейки. Таким образом, на втором уровне размер ячейки должен быть больше, чем на первом, а на третьем уровне больше, чем на втором. Первый уровень иерархии обязателен, однако можно отключить второй и третий уровни, установив нулевое значение (0).

Создание пространственного индекса в Spatial Extender

Приложение DB2 Spatial Extender создает пространственный индекс следующим образом.

  1. Приложение Spatial Extender пересекает оболочку каждой геометрии сеткой, начиная с первого уровня.
  2. Если на первом уровне иерархии произошло меньше четырех пересечений, приложение Spatial Extender вводит ID геометрии и ID пересекаемых ячеек сетки в пространственном индексе, а затем переходит к следующей геометрии.
  3. Если приложение Spatial Extender определяет более четырех пересечений, он пересекает геометрию вторым уровнем сетки. Если второй уровень сетки не включен, Spatial Extender вводит ID геометрии и ID ячеек сетки в пространственный индекс и переходит к следующей геометрии.
  4. Если на втором уровне иерархии произошло менее четырех пересечений, приложение Spatial Extender вводит ID геометрии и ID пересекаемых ячеек сетки в пространственном индексе и переходит к следующей геометрии.
  5. Если приложение Spatial Extender определяет более четырех пересечений, он пересекает геометрию третьим уровнем сетки. Если третий уровень сетки не включен, Spatial Extender вводит ID геометрии и ID ячеек сетки в пространственный индекс и переходит к следующей геометрии.
  6. Приложение Spatial Extender вводит ID геометрии и ID пересекаемых ячеек сетки третьего уровня в пространственный индекс, а затем переходит к следующей геометрии.

Приложение Spatial Extender фактически не создает структуру сетки полигонов какого-либо типа. Spatial Extender декларирует каждый уровень сетки параметрически, определяя начало координат в виде смещений по осям x,y в системе пространственной привязки столбца, обеспечивая расширение в пространстве положительных координат. Spatial Extender создает пересечения математическим способом с помощью параметрической сетки.

Использование приложением Spatial Extender пространственного индекса

Spatial Extender использует пространственный индекс для роста производительности пространственного запроса. Местный запрос – это основной и, возможно, наиболее распространенный пространственный запрос, который возвращает геометрии пространственного столбца, пересекающие определенное пользователем место. Если пространственный индекс не существует, приложение Spatial Extender должно сравнить все геометрии пространственного столбца с этим местом.

Spatial Extender идентифицирует входные данные индексной сетки, которая пересекает это место, с помощью пространственного индекса. Так как пространственный индекс ориентирован на сетку, Spatial Extender быстро получает список геометрий-кандидатов. Этот процесс называется первым проходом.

Второй проход выполняется по списку геометрий-кандидатов. При этом отсеиваются все геометрии, которые огибают это место, не пересекая его.

При третьем проходе фактические координаты геометрии-кандидата сравниваются с местом для определения факта пересечения этого места геометрией. Этот последний сложный процесс сравнения выполняется на основе поднабора строк таблицы, но за счет первых двух проходов время его выполнения значительно сокращается.

Все пространственные запросы обрабатываются в три прохода за исключением функции EnvelopesIntersect, которая выполняется только в течение первых двух проходов. Функция EnvelopesIntersect предназначена для отображения операций, в которых используется сокращение работы драйвера экрана, что не требует детализации третьего прохода.

Оптимальные размеры ячеек сетки

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

Пространственный индекс эффективен в случае выбора правильного числа уровней и размеров их ячеек сетки для размещения данных. Чтобы упростить этот выбор, сначала следует определиться с пространственным столбцом, который содержит геометрию одинакового размера. В этом случае нет необходимости создавать многоуровневый пространственный индекс, так как единственного уровня сетки будет достаточно. Создайте пространственный индекс с единственным уровнем сетки, который имеет размер ячеек сетки в 1,5 раза больше размера средней оболочки геометрии.

ПодсказкаПодсказка:

Так как данные типа точки имеют малую оболочку, размер сетки также может быть минимальным.

Основное правило заключается в том, что размер сетки должен составлять около одной десятой размера стандартного окна запроса. Для данных типа точки будет достаточно только одного уровня сетки.

Во время тестирования приложения можно заметить, что это правило действует эффективнее по сравнению с выбором более крупного размера ячеек сетки, так как каждая ячейка сетки связана с большим количеством геометрий, позволяя при первом проходе быстрее отсеивать неподходящие геометрии. Однако если продолжать увеличить размер ячеек сетки, производительность снизится, поскольку количество геометрий, отфильтрованных при втором проходе, возрастает.

Приложение DB2 Spatial Extender предоставляет утилиту Index Advisor, позволяющую имитировать индекс сетки и настраивать его для соответствия модели с целью создания фактического индекса. Она также позволяет определить, следует ли оставить или заменить существующий индекс сетки.

Следующий пример демонстрирует использование утилиты Index Advisor для получения подробной информации о существующем индексе сетки. В этом примере полным именем индекса сетки является mydb.myindex.

gseidx connect to mydb user test using test get geometry statistics for index mydb.myindex detail

В командах shp2sde и cov2sde используются похожие алгоритмы расчета пространственного индекса по умолчанию для размера сетки уровня 1, если отсутствует дополнительная опция –g. Значения по умолчанию для размера сетки уровня 2 и уровня 3 всегда равны НУЛЮ (ZERO), где shp2sde зависит от экстента шейп-файла, а cov2sde – от экстента покрытия. Дополнительные сведения об использовании команд shp2sde и cov2sde см. в справочнике по командам администрирования ArcSDE (ArcSDE Administration Command Reference), входящем в состав ArcSDE.

Выбор количества уровней

Несколько пространственных столбцов содержат геометрию одного относительного размера. Однако геометрии большинства пространственных столбцов можно сгруппировать по интервалам размеров. Например, рассмотрим пространственный столбец участков областей, содержащих огромное количество небольших участков, сгруппированных в городские области, окруженные несколькими крупными сельскими участками. Такие ситуации распространены и требуют использования многоуровневого пространственного индекса. Для выбора размеров ячеек сетки каждого уровня определите интервалы размеров оболочки геометрии. Создайте пространственный индекс с размерами ячеек уровня сетки, немного превышающими каждый интервал. Протестируйте индекс, отправив запросы к пространственному столбцу с помощью приложения. Попробуйте слегка скорректировать размеры сетки в большую или меньшую сторону для определения момента, при котором будет достигнуто значительное улучшение в производительности.

Дополнительную информацию по этой теме см. в главе 11 "Использование индексов и видов для доступа к пространственным данным" Руководства пользователя и справочника по IBM DB2 Spatial Extender (IBM DB2 Spatial Extender User's Guide and Reference).

5/10/2014