postgresql/contrib/rtree_gist
Tom Lane f85f43dfb5 Backend support for autocommit removed, per recent discussions. The
only remnant of this failed experiment is that the server will take
SET AUTOCOMMIT TO ON.  Still TODO: provide some client-side autocommit
logic in libpq.
2003-05-14 03:26:03 +00:00
..
bench Backend support for autocommit removed, per recent discussions. The 2003-05-14 03:26:03 +00:00
data
expected Update /contrib for "autocommit TO 'on'". 2002-10-18 18:41:22 +00:00
sql SET autocommit no longer needed in /contrib because pg_regress.sh does 2002-10-21 01:42:14 +00:00
Makefile
README.rtree_gist
rtree_gist.c pgindent run. 2002-09-04 20:31:48 +00:00
rtree_gist.sql.in Backend support for autocommit removed, per recent discussions. The 2003-05-14 03:26:03 +00:00

This is R-Tree implementation using GiST.
Code (for PG95) are taken from http://s2k-ftp.cs.berkeley.edu:8000/gist/pggist/
and changed according to new version of GiST (7.1 and above)

All work was done by Teodor Sigaev (teodor@stack.net) and Oleg Bartunov
(oleg@sai.msu.su). See http://www.sai.msu.su/~megera/postgres/gist
for additional information.

CHANGES:
     Oct 10 MSD 2001

     1. Implemented new linear algorithm for picksplit
         ref. ( 'New Linear Node Splitting Algorithm for R-tree',
               C.H.Ang and T.C.Tan )

     Tue May 29 17:04:16 MSD 2001
     
     1. Small fixes in polygon code
        Thanks to Dave Blasby <dblasby@refractions.net>

     Mon May 28 19:42:14 MSD 2001

     1. Full implementation of R-tree using GiST - gist_box_ops,gist_poly_ops
     2. gist_poly_ops is lossy
     3. NULLs support
     4. works with multi-key GiST
     
NOTICE:
     This version will works only with postgresql version 7.1 and above
     because of changes in interface of function calling.

INSTALLATION:

  gmake
  gmake install
  -- load functions
  psql <database> < rtree_gist.sql

REGRESSION TEST:

   gmake installcheck

EXAMPLE USAGE:

   create table boxtmp (b box);
   -- create index
   create index bix on boxtmp using gist (b gist_box_ops);
   -- query
   select * from boxtmp where b && '(1000,1000,0,0)'::box;


BENCHMARKS:

 subdirectory bench contains benchmark suite.
 Prerequisities: perl, DBI, DBD:Pg, Time::HiRes

  cd ./bench
  1. createdb TEST
  2. psql TEST < ../box.sql
  3. ./create_test.pl | psql TEST 
     -- change $NUM - number of rows in test dataset
  4. ./bench.pl - perl script to benchmark queries. 
                  Run script without arguments to see available options.

     a)test without GiST index, using built-in R-Tree
       ./bench.pl -d TEST 
     b)test R-Tree using GiST index
       ./bench.pl -d TEST -g 


RESULTS:

1. One interesting thing is that insertion time for built-in R-Tree is 
   about 8 times more than ones for GiST implementation of R-Tree !!!
2. Postmaster requires much more memory for built-in R-Tree
3. Search time depends on dataset. In our case we got:
        +------------+-----------+--------------+
        |Number boxes|R-tree, sec|R-tree using  |
        |            |           |   GiST, sec  |
        +------------+-----------+--------------+
        |          10|      0.002|         0.002|
        +------------+-----------+--------------+
        |         100|      0.002|         0.002|
        +------------+-----------+--------------+
        |        1000|      0.002|         0.002|
        +------------+-----------+--------------+
        |       10000|      0.015|         0.025|
        +------------+-----------+--------------+
        |       20000|      0.029|         0.048|
        +------------+-----------+--------------+
        |       40000|      0.055|         0.092|
        +------------+-----------+--------------+
        |       80000|      0.113|         0.178|
        +------------+-----------+--------------+
        |      160000|      0.338|         0.337|
        +------------+-----------+--------------+
        |      320000|      0.674|         0.673|
        +------------+-----------+--------------+