mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 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|
 | |
|         +------------+-----------+--------------+
 |