GiST Indices

La información sobre GIST está en http://GiST.CS.Berkeley.EDU:8000/gist/ con más sobre diferentes esquemas de ordenación e indexado en http://s2k-ftp.CS.Berkeley.EDU:8000/personal/jmh/ También existe más lectura interesante en el sitio de la base de datos de Berkely en http://epoch.cs.berkeley.edu:8000/.

NotaAutor
 

Esta extracción de un e-mail enviado por Eugene Selkov Jr. contiene buena información sobre GiST. Seguramente aprenderemos más en el futuro y actualizaremos esta información. - thomas 1998-03-01

Bueno, no puedo decir que entienda lo que está pasando, pero por lo menos (casi) he logrado portar los ejemplos GiST a linux. El método de acceso GiST ya está en el árbol de postfres (src/backend/access/gist).

Examples at Berkeley vienen con una introducción de los métodos y demuestran mecanismos de índices espaciales para cajas 2D, polígonos, intervalos enteros y testo come with an overview of the methods and demonstrate spatial index mechanisms for 2D boxes, polygons, integer intervals and text (véase también GiST at Berkeley). En el ejemplo de la caja, se supone que veremos un aumento en el rendimiento al utilizar el índice GiST; a mí me funcionó, pero yo no tengo una colección razonablemente grande de cajas para comprobar. Otros ejemplos también funcionaron, excepto polígonos: obtuve un error al hacer

test=> create index pix on polytmp
test-> using gist (p:box gist_poly_ops) with (islossy);
ERROR:  cannot open pix

(PostgreSQL 6.3               Sun Feb  1 14:57:30 EST 1998)

No entiendo el sentido de este mensage de error; parece ser algo que deberíamos preguntar a los desarrolladores (mira también la Nota 4 más abajo). Lo que sugeriría aquí es que alguien de vosotros, gurús de Linux (linux==gcc?), tomeis las fuentes originales citadas arriba y apliqueis mi parche (véase el adjunto) y nos dijeseis que pensais sobre esto. Me parece muy bien a mi, pero no me gustaría mantenerlo mientras que hay tanta gente competente disponible.

Unas pocas notas en los fuentes:

1. No fui capaz de utilizar el Makefile original (HPUX) y reordenarlo con el viejo tutorial de postgres95 para hacerlo funcionar. Intenté mantenerlo genérico, pero no soy un escritor de makefiles muy pobre --simplemente lo hizo funcionar algún mono. Lo siento, pero creo que ahora es un poco más portable que el makefile original.

2. Compilé las fuentes de ejemplo inmediatamente debajo de pgsql/src (simplemente extraje el archivo tar allí). El Makefile previamente mencionado supone que está un nivel por debajo de pgsql/src (en nuestro caso, en pgsql/src/pggist).

3. Los cambios que hice a los ficheros *.c fueron todos sobre #includes's, prototipos de funciones y typecasting. Fuera de eso, solamente deseché una ristra de variables no utilizadas y añadí un par de parentesis para contentar a gcc. Espero que esto no haya enredado las cosas mucho :)

4. Hay un commentario en polyproc.sql:

-- -- there's a memory leak in rtree poly_ops!!
-- -- create index pix2 on polytmp using rtree (p poly_ops);
(-- -- existe una fuga de memoria en el rtree poly_ops!!)
(-- -- crea un índice pix2 en polytmp utilizando rtree (p poly_ops)
Pensé que podría estar relacionado con un número de versión de Postgres anterior e intenté la consulta. Mi sistema se volvió loco y tuve que tirar el postmaster en unos diez minutos.

Voy a contunuar mirando dentro de GiST un rato, pero también agradecería más ejemplos en la utilización de los R-tree.