Índices espaciales generados por DB2 Spatial Extender
IBM DB2 Spatial Extender proporciona un índice espacial con una cuadrícula de tres niveles para que las aplicaciones puedan consultar los datos geográficos de dos dimensiones dentro de una columna espacial e identifiquen rápidamente todas las geometrías dentro de una extensión dada.
El índice espacial de dos dimensiones difiere del tradicional índice de árbol B jerárquico que proporciona DB2. Es posible que el índice de árbol B no se aplique a una columna espacial porque la característica bidimensional de la columna espacial requiere de la estructura de un índice espacial. Por este mismo motivo, es posible que no pueda aplicar un índice espacial a una columna no espacial ni a una columna compuesta de ningún tipo.
Es por esto que la sintaxis CREATE INDEX del índice espacial incluye la cláusula adicional USING, que indica a DB2 a que utilice el índice espacial de Spatial Extender en lugar de un índice de árbol B. La sintaxis completa es la siguiente:
CREATE INDEX <index_name> ON <table> (<spatial column>) USING db2gse.spatial_index (<grid level 1>, [grid level 2], [grid level 3])
La adición de la cláusula USING distingue el índice espacial del índice de árbol B. El nombre de esquema db2gse debe calificar el nombre de extensión spatial_index, ya que esta declaración no sigue la ruta de función actual.
Debido a la simple naturaleza de los datos que un árbol B está diseñado para indexar, el diseñador de la base de datos sólo dirige a DB2 para que cree el índice en una o más columnas de la tabla. Sin embargo, como los datos espaciales son complejos, es necesario que el diseñador comprenda la distribución de tamaño relativa. El diseñador debe determinar el tamaño y el número óptimos de los niveles de cuadrícula del índice espacial.
Los niveles de cuadrícula ([nivel de cuadrícula 1], [nivel de cuadrícula 2], [nivel de cuadrícula 3]) se introducen mediante el aumento del tamaño de celda. De esta manera, el segundo nivel debe tener un tamaño de celda mayor que el primero, y el tercero un tamaño de celda mayor que el segundo. El primer nivel de cuadrícula es obligatorio, pero puede deshabilitar el segundo y el tercero con un valor de cero (0).
Cómo Spatial Extender genera un índice espacial
DB2 Spatial Extender construye un índice espacial de la siguiente manera:
- Spatial Extender interseca el sobre de cada geometría con la cuadrícula y comienza con el primer nivel.
- Si ocurren menos de cuatro intersecciones con el primer nivel de cuadrícula, Spatial Extender introduce el Id. de geometría y los Id. de la celda de cuadrícula que se intersecan en el índice espacial y continúa con la siguiente geometría.
- Si Spatial Extender detecta más de cuatro intersecciones, interseca la geometría con el segundo nivel de cuadrícula. Si no habilitó el segundo nivel de cuadrícula, Spatial Extender introduce el Id. de geometría y los Id. de la celda de cuadrícula en el índice espacial y continúa con la siguiente geometría.
- Si ocurren menos de cuatro intersecciones con el segundo nivel de cuadrícula, Spatial Extender introduce el Id. de geometría y los Id. de la celda de cuadrícula que se intersecan en el índice espacial y continúa con la siguiente geometría.
- Si Spatial Extender detecta más de cuatro intersecciones, interseca la geometría con el tercer nivel de cuadrícula. Si no habilitó el tercer nivel de cuadrícula, Spatial Extender introduce el Id. de geometría y los Id. de la celda de cuadrícula en el índice espacial y continúa con la siguiente geometría.
- Spatial Extender introduce el Id. de geometría y los Id. de la celda de cuadrícula que se intersecan del tercer nivel en el índice espacial y continúa con la siguiente geometría.
En realidad, Spatial Extender no crea una estructura de cuadrícula poligonal de ningún tipo. Spatial Extender manifiesta cada nivel de cuadrícula en forma paramétrica mediante la definición del origen como los desplazamientos x,y del sistema de referencia espacial de la columna que se extienden a un espacio de coordenadas positivo. Mediante el uso de una cuadrícula paramétrica, Spatial Extender genera las intersecciones de forma matemática.
Cómo Spatial Extender utiliza el índice espacial
Spatial Extender utiliza un índice espacial para mejorar el rendimiento de una consulta espacial. La consulta de cuadro (la consulta espacial más básica y probablemente la más conocida) devuelve las geometrías de una columna espacial que intersecan un cuadro definido por el usuario. Si el índice espacial no existe, Spatial Extender debe comparar todas las geometrías de una columna espacial con el cuadro.
Mediante el uso del índice espacial, Spatial Extender identifica las entradas de la cuadrícula del índice que intersecan el cuadro. Como el índice espacial está ordenado en una cuadrícula, Spatial Extender obtiene rápidamente una lista de las geometrías posibles. Este proceso se denomina primera pasada.
Una segunda pasada examina la lista de geometrías posibles y descalifica cualquier geometría que posea sobres que no intersequen el cuadro.
Una tercera pasada compara las coordenadas reales de la geometría posible con el cuadro para determinar si la geometría interseca el cuadro o no. Este último proceso complejo de comparación funciona en un subconjunto de filas de tabla, significativamente reducido por las dos primeras pasadas.
Todas las consultas espaciales realizan las tres pasadas, excepto la función EnvelopesIntersect, que realiza sólo las dos primeras pasadas. La función EnvelopesIntersect fue diseñada para que muestre las operaciones que utilizan rutinas de recorte del controlador de pantalla y no requieren la granularidad de la tercera pasada.
Tamaños de celda de la cuadrícula óptimos
Seleccionar el tamaño de celda de la cuadrícula no es una tarea fácil, debido a que los sobres con geometrías de forma irregular no se ajustan de manera prolija dentro de una celda de cuadrícula. Debido a esta irregularidad, algunos sobres de la geometría intersecan varias cuadrículas, mientras que otros se ajustan dentro de una celda de cuadrícula simple. Por el contrario, las celdas de cuadrícula pueden intersecar varios sobres de geometría, según la distribución espacial de los datos.
Un índice espacial funciona correctamente cuando se habilita el número correcto de niveles y los tamaños de celda de cuadrícula para que se ajusten a los datos. Para simplificar este análisis, primero considere una columna espacial que contenga una geometría de tamaño uniforme. En este caso, no es necesario crear un índice espacial de multinivel ya que un nivel de cuadrícula simple es suficiente. Cree un índice espacial con un nivel de cuadrícula simple cuyo tamaño de celda de la cuadrícula sea 1,5 veces el tamaño del sobre de geometría promedio.
Como los datos de punto poseen un sobre pequeño, el tamaño de la cuadrícula también puede ser pequeño.
La regla general es que el tamaño de la cuadrícula debe ser de aproximadamente un décimo del tamaño típico de la ventana de consulta. Para los datos de punto, debe ser necesario sólo un nivel de cuadrícula simple.
Cuando pruebe la aplicación, puede descubrir que funciona mejor con un tamaño de celda de la cuadrícula mayor porque cada celda de cuadrícula hace referencia a más geometrías, lo que permite que la primera pasada descarte de forma más rápida las geometrías que no califican. Sin embargo, si continúa aumentando el tamaño de celda de la cuadrícula, el rendimiento se deteriora a medida que aumenta la cantidad de geometrías que filtra la segunda pasada.
DB2 Spatial Extender proporciona una utilidad, Index Advisor, que permite crear una cuadrícula del índice simulada y ajustar este índice a un modelo de índice real. También determina si se debe retener o reemplazar el índice de cuadrícula existente.
El siguiente es un ejemplo de cómo utilizar Index Advisor para devolver información detallada sobre un índice de cuadrícula existente. En este ejemplo, el nombre completamente calificado del índice de cuadrícula es mydb.myindex:
gseidx connect to mydb user test using test get geometry statistics for index mydb.myindex detail
shp2sde y cov2sde utilizan un algoritmo similar para calcular el índice espacial predeterminado del tamaño de cuadrícula de nivel 1 cuando la opción –g opcional no está presente. Los valores predeterminados del tamaño de cuadrícula de nivel 2 y de nivel 3 siempre están establecidos en ZERO, donde shp2sde está basado en la extensión del shapefile y cov2sde está basado en la extensión de cobertura de ArcInfo. Para obtener detalles sobre el uso de los comandos shp2sde o cov2sde, consulte Referencia de comandos de administración de ArcSDE suministrada con ArcSDE.
Seleccionar la cantidad de niveles
Pocas columnas espaciales contienen una geometría del mismo tamaño relativo. Sin embargo, las geometrías de la mayoría de las columnas espaciales se pueden agrupar en intervalos de tamaño. Por ejemplo, considere una columna espacial de parcelas de condado que contenga una gran cantidad de pequeñas parcelas agrupadas en las áreas urbanas y circundadas por unas pocas parcelas rurales grandes. Estas situaciones son comunes y requieren del uso de un índice espacial de multinivel. Para seleccionar los tamaños de la celda de cuadrícula de cada nivel, determine los intervalos de los tamaños del sobre de geometría. Cree un índice espacial con tamaños de la celda al nivel de la cuadrícula un poco más grandes que cada intervalo. Realice consultas contra la columna espacial con la aplicación a fin de evaluar el índice. Intente ajustar los tamaños de cuadrícula un poco hacia arriba o hacia abajo para determinar si se puede obtener una mejora apreciable en el rendimiento.
Para obtener más detalles sobre este tema, consulte el capítulo 11, "Utilización de índices y vistas para acceder a datos espaciales", en la Guía del usuario y manual de consulta de IBM DB2 Spatial Extender.