New Index

Started by algattover 18 years ago3 messages
#1algatt
alangatt@gmail.com

Hello,

I am trying to create a new index for high multi-dimensional indexing.
The index I'm trying to use in PR-Tree ( www.cs.duke.edu/~yike/prtree/
).

I have created a new source file in "src/backend/access/" and for now
I have created the empty functions: build, insert, vacuum, etc... I
believe that this has to be done in C. Then I ran "/src/include/
catalog/unused_oids" to find the unused oids, and then i added the
oids to the functions in the source "file /src/include/catalog/
pg_proc.h". I re-ran initdb and inserted the functions in pg_am table.

Now obviously I have to add the proper code to the functions, but the
version of the code I have for the PR-Tree is in C++. Is there a way
to implement the functions using the existing PR-Tree code in C++?

Thanks for your help.

Regards,
Alan

#2Heikki Linnakangas
heikki@enterprisedb.com
In reply to: algatt (#1)
Re: New Index

algatt wrote:

I am trying to create a new index for high multi-dimensional indexing.
The index I'm trying to use in PR-Tree ( www.cs.duke.edu/~yike/prtree/
).

I have created a new source file in "src/backend/access/" and for now
I have created the empty functions: build, insert, vacuum, etc... I
believe that this has to be done in C. Then I ran "/src/include/
catalog/unused_oids" to find the unused oids, and then i added the
oids to the functions in the source "file /src/include/catalog/
pg_proc.h". I re-ran initdb and inserted the functions in pg_am table.

You seem to be on the right track.

Now obviously I have to add the proper code to the functions, but the
version of the code I have for the PR-Tree is in C++. Is there a way
to implement the functions using the existing PR-Tree code in C++?

No, we don't support C++ in the backend. It's almost certainly easier to
just start from scratch anyway, because integrating it with all the
PostgreSQL infrastructure like the buffer manager, vacuum, WAL-logging,
data type and operator system.

--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com

#3David Fuhry
dfuhry@cs.kent.edu
In reply to: Heikki Linnakangas (#2)
Re: New Index

algatt,

You might find the examples of PostGIS [1]http://postgis.refractions.net/ and SP-GiST [2]http://www.cs.purdue.edu/spgist/ helpful
in implementing your PR-Tree index, although the former implements only
2D R-Trees and the latter implements tries, quadtrees, and kd-trees but
not R-Trees (and extends GiST).

Yours may be the first PostgreSQL R-Tree implementation which takes
advantage of bulk-loading. The Oracle Spatial guys have had a
bulk-loading implementation [3]Ning An, Kothuri Venkata Ravi Kanth, Siva Ravada: Improving Performance with Bulk-Inserts in Oracle R-Trees. VLDB 2003: 948-951 since 10g, based on [4]L. Arge, K. Hinrichs, et al. Efficient Bulk Operations on Dynamic R-trees. In Workshop on Algorithm Engi- neering and Experimentation (ALENEX), pages 328– 348, 1999..

-Dave Fuhry

[1]: http://postgis.refractions.net/
[2]: http://www.cs.purdue.edu/spgist/
[3]: Ning An, Kothuri Venkata Ravi Kanth, Siva Ravada: Improving Performance with Bulk-Inserts in Oracle R-Trees. VLDB 2003: 948-951
Performance with Bulk-Inserts in Oracle R-Trees. VLDB 2003: 948-951
[4]: L. Arge, K. Hinrichs, et al. Efficient Bulk Operations on Dynamic R-trees. In Workshop on Algorithm Engi- neering and Experimentation (ALENEX), pages 328– 348, 1999.
on Dynamic R-trees. In Workshop on Algorithm Engi-
neering and Experimentation (ALENEX), pages 328–
348, 1999.

Heikki Linnakangas wrote:

Show quoted text

algatt wrote:

I am trying to create a new index for high multi-dimensional indexing.
The index I'm trying to use in PR-Tree ( www.cs.duke.edu/~yike/prtree/
).

I have created a new source file in "src/backend/access/" and for now
I have created the empty functions: build, insert, vacuum, etc... I
believe that this has to be done in C. Then I ran "/src/include/
catalog/unused_oids" to find the unused oids, and then i added the
oids to the functions in the source "file /src/include/catalog/
pg_proc.h". I re-ran initdb and inserted the functions in pg_am table.

You seem to be on the right track.

Now obviously I have to add the proper code to the functions, but the
version of the code I have for the PR-Tree is in C++. Is there a way
to implement the functions using the existing PR-Tree code in C++?

No, we don't support C++ in the backend. It's almost certainly easier to
just start from scratch anyway, because integrating it with all the
PostgreSQL infrastructure like the buffer manager, vacuum, WAL-logging,
data type and operator system.