Re: How to implement a SP-GiST index as a extension module?
Oleg Bartunov <obartunov@gmail.com>
From: Oleg Bartunov <obartunov@gmail.com>
To: Connor Wolf <wolf@imaginaryindustries.com>
Cc: Pgsql Hackers <pgsql-hackers@postgresql.org>
Date: 2017-10-30T11:07:41Z
Lists: pgsql-hackers
On Mon, Oct 30, 2017 at 12:05 PM, Oleg Bartunov <obartunov@gmail.com> wrote: > On Sun, Oct 29, 2017 at 10:07 AM, Connor Wolf > <wolf@imaginaryindustries.com> wrote: >> Hi there! >> >> I'm looking at implementing a custom indexing scheme, and I've been having >> trouble understanding the proper approach. >> >> Basically, I need a BK tree, which is a tree-structure useful for indexing >> arbitrary discrete metric-spaces (in my case, I'm interested in indexing >> across the hamming edit-distance of perceptual hashes, for fuzzy image >> searching). I'm pretty sure a SP-GiST index is the correct index type, as my >> tree is intrinsically unbalanced. >> >> I have a functional stand-alone implementation of a BK-Tree, and it works >> very well, but the complexity of managing what is basically a external index >> for my database has reached the point where it's significantly problematic, >> and it seems to be it should be moved into the database. >> >> Anyways, looking at the contents of postgres/src/backend/access/spgist, it >> looks pretty straightforward in terms of the actual C implementation, but >> I'm stuck understanding how to "install" a custom SP-GiST implementation. >> There are several GiST indexing implementations in the contrib directory, >> but no examples for how I'd go about implementing a loadable SP-GiST index. >> >> Basically, my questions are: >> >> Is it possible to implement a SP-GiST indexing scheme as a loadable module? >> >> If so, how? >> And is there an example I can base my implementation off of? > > Look on RUM access method ( https://github.com/postgrespro/rum ) we > developed using > api available since 9.6. or even simple, there is contrib/bloom access method, which illustrates developing access method as an extension. > > >> >> I'm relatively comfortable with C (much moreso with C++), but I haven't >> spent a lot of time looking at the postgresql codebase. I don't think I >> could start from a empty folder and make a properly-implemented module in >> any reasonable period of time, so if I have a working example for some sort >> of index that uses the same interfaces that would really help a lot. >> >> Thanks! >> Connor
Commits
-
Support index-only scans in contrib/cube and contrib/seg GiST indexes.
- de1d042f5979 11.0 landed