[postgis-users] JTS -- was Re: Transform Performance

strk at refractions.net strk at refractions.net
Thu Oct 27 01:04:16 PDT 2005


On Wed, Oct 26, 2005 at 05:46:42PM -0400, Robert Burgholzer wrote:
> With regard to general performance, are the performance hits due to
> execution of java functions?
> 
> I ask because, I think I found that the intersection() function seems to
> be java based (in JTS). Is this a correct interpretation of what is
> going on? I suppose I could just RTFLA (the friendly list archives that
> is), as I recall the topics of porting java functions to postgis. I had
> understood that this was the porting of java to C++, but perhaps that is
> untrue. Anyone that can clarify this?

intersection() is a function performed by a separate library
linked to the postgis library. At PostGIS compile time you 
can choose this external library between:
	- GEOS built with a c++ compiler
	- EXPERIMENTAL JTS built with gcj (GNU Java compiler)

In this case no topological function is involved, so penalty is
not due to these external libraries.

--strk;

> 
> r.b.
> 
> 
> On Wed, 2005-10-26 at 16:17, Charlie Savage wrote:
> > Very interesting.  Following your lead I created this function and then 
> > ran it through the scenarios you discuss below.
> > 
> > CREATE OR REPLACE FUNCTION
> > testme(value int) RETURNS int
> > AS $$
> > BEGIN
> > 	RAISE INFO 'testme: %', value;
> > 	RETURN value;
> > END;
> > $$
> > LANGUAGE plpgsql IMMUTABLE;
> > 
> > 
> > I thought, but was wrong, that in this case the function would only be 
> > called once:
> > 
> > select testme(MyField) from MyTable;
> > 
> > I had hoped that Postgresql would cache the value of the input 
> > parameter, see that testme had already been invoked for that parameter, 
> > and skip the evaluation.  However, it does not, the method get called 
> > for every record.  From the Postgresql docs (emphasis is mine):
> > 
> > "An IMMUTABLE function cannot modify the database and is guaranteed to 
> > return the same results given the same arguments forever. This category 
> > allows the optimizer to pre-evaluate the function when a query calls it 
> > with *constant* arguments."
> > 
> > > 
> > > POSSIBLE OPTIMIZATIONS
> > > 
> > > First optimization that comes to mind is reducing scans by making
> > > outer-level get_proj4_from_srid() calls take a constant argument:
> > > 
> > > 	transform_geometry(g, get_proj4_from_srid(find_srid(..)),
> > > 		get_proj4_from_srid(4326));
> > > 
> > 
> > Perhaps a quick simple way to do this is to create an overloaded version 
> > of transform that takes both the source srs and targer srs as constants. 
> >   That would get rid of all the SRID calls, and all but two of the 
> > get_proj4_from_srid calls.  Thus it would be a lot faster, but not much 
> > harder to use.
> > 
> > Thanks,
> > 
> > Charlie
> > 
> > 
> > 
> > _______________________________________________
> > postgis-users mailing list
> > postgis-users at postgis.refractions.net
> > http://postgis.refractions.net/mailman/listinfo/postgis-users
> -- 
> Non-point Source Data Analyst
> University of Maryland, College Park
> Chesapeake Bay Program Office
> 410 Severn Avenue, Suite 305B
> Annapolis, MD, 21403
> Phone: (410) 267-5779
> 
> rburghol at chesapeakebay.net
> 
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users



More information about the postgis-users mailing list