WFS performance issue
Yewondwossen Assefa
assefa at DMSOLUTIONS.CA
Thu Mar 24 11:35:29 EST 2005
I would give it a shot if it gives me ideas but I am not prepared at
this point to make major changes beside integrating code to optimize things.
Later
Bart van den Eijnden wrote:
> Hi Assefa,
>
> just a thought, would it not be wise to look into the Geotools/Geoserver
> code for translating Filter into SQL? It could provide some ideas. Or at
> least get some more information from them on this before implementing?
>
> Best regards,
> Bart
>
>
>>I have looked into it a bit yestrady night and here how I think of
>>implemeting the changes :
>>
>> - for simple filter encoding cases (by simple I mean a filer encoding
>>that has only comparion operators bundled with logical operators. Eg
>>Attribute1 eq value1 and/or/not alltibute2 > value2), The fiter encoding
>>xml would be transformed into one SQL statment and this statement will
>>be applied to the Layer's FILTER parameter. Then the wfs code will do
>>mapserver query using the map extents. Any class elements that were
>>intially set on the layer would be removed. I think this would adress
>>most of the cases as I understand it.
>>
>> - When the filter encoding become complexe (combination of spatial
>>filters (such as bbox, within), with comparison operators and logical
>>opertaors, It becomes quite impossible to transform that into *one*
>>statement and only do one query. In this case, the filter would be
>>parsed into several simple filters and these simple filters will be
>>applied separatly. For example if we have something like this
>> AND
>> Property1 = value 1
>> Pripety2 > value 2
>> Or
>> bbox xmin, ymin, xmax, ymax
>>
>> This would result :
>> - 1 sql statment for Property1 = value 1 and a query using the map
>>extent
>> - 1 sql statement for Pripety2 > value 2 1 and a query using the
>>map extent
>> - merge (AND) of the 2 results
>> - 1 query using the bbox
>> - merge (or) with the prvious set of elements found.
>>
>> I understand the this way of implementing complexe filters is not the
>>most optimal but Filters can become so complex that I need some kind of
>>logic and limitation to be able to adress all the cases.
>>
>>
>> Comments ?
>>
>>Later,
>>
>>Frank Warmerdam wrote:
>>
>>>On Thu, 24 Mar 2005 14:23:50 +0100, Arnulf Christl
>>><arnulf.christl at ccgis.de> wrote:
>>>
>>>
>>>>What got us stuck was the way MapServer did the query. If i got that one
>>>>right: MS first starts a full table scan using the only bbox it could
>>>>find - which is the WFS_EXTENT to retrieve the oid of all relevant
>>>>geometries. Then it starts another query with the parameters i'd expect
>>>>to be in the WHERE clause on this "subset" (which still comprises all
>>>>6.5 million elements). This is too heavy for the underlying Oracle
>>>>database, Apache timeouts, etc. - it just wont do.
>>>
>>>
>>>Arnulf,
>>>
>>>My understanding is that there are two issues. One is the unnecessary
>>>or
>>>confusing spatial query imposed by the .map bbox even when the wfs
>>>query has no spatial restriction. The other is the fact that
>>>attribute filtering
>>>is done as a post-processing step by mapserver instead of being passed
>>>into the RDBMS as a WHERE style filter.
>>>
>>>I propose to dig into making MapServer queries able to handle NULL
>>>query rects in cases where no spatial filtering makes sense. This can
>>>reduce query optimization confusion in some spatial databases (and OGR!)
>>>as well as help avoid problems like Tom K. ran into recently with the
>>>unexpected effect of his .map EXTENT on WFS queries.
>>>
>>>Assefa is offering to rewrite WFS attribute queries in a backend
>>>specific
>>>format (likely just adding support for SQL WHERE for Oracle, PostGIS
>>>and OGR) so that the attribute filtering can go down to the database
>>>instead of being done in MapServer as a postprocessing step.
>>>
>>>So I believe it is Assefa's change that will make a several orders
>>>of magnitude improvement in performance for your case. My change
>>>might also be helpful in some cases.
>>>
>>>
>>>
>>>>The fun thing is that we *can* do it by using MapServer as a warped WMS.
>>>>We simply activate the internal (not OGC) FILTER expression which we add
>>>>to the WMS getMap as a vendor parameter. Setting DUMP=true you get a
>>>>valid GML - which is all we need to gazetteer, highlight, download and
>>>>edit the land parcel.
>>>
>>>
>>>Wow, thats pretty neat though I don't follow it completely. But
>>>hopefully
>>>we will reach a point where things can be a little easier to optimize
>>>"out of the box".
>>>
>>>Best regards,
>>
>>--
>>----------------------------------------------------------------
>>Assefa Yewondwossen
>>Software Analyst
>>
>>Email: assefa at dmsolutions.ca
>>http://www.dmsolutions.ca/
>>
>>Phone: (613) 565-5056 (ext 14)
>>Fax: (613) 565-0925
>>----------------------------------------------------------------
>>
>
>
--
----------------------------------------------------------------
Assefa Yewondwossen
Software Analyst
Email: assefa at dmsolutions.ca
http://www.dmsolutions.ca/
Phone: (613) 565-5056 (ext 14)
Fax: (613) 565-0925
----------------------------------------------------------------
More information about the mapserver-dev
mailing list