[mapserver-users] Performance in regular expressions or analternative way to select a list of features

Steve Lime Steve.Lime at dnr.state.mn.us
Tue Jul 14 10:38:31 EDT 2009


Have you tried a simplified version of your regex? I think you can do:

  EXPRESSION /^ITEM1|ITEM2|ITEM3|ITEM4$/

You might also consider writing a temporary set of geometries if a user will continually display from
that set. In that case your overhead would be in managing the set of features which would be higher
the first time but then very fast to render. Your dynamic portion of the mapfile would reference the
temporary data.

Steve

>>> On 7/14/2009 at 1:15 AM, in message <4A5C2277.80204 at romtelecom.ro>, Adrian Popa
<adrian_gh.popa at romtelecom.ro> wrote:
> Hello everyone,
> 
> Here's my problem: I'm trying to highlight segments from a line layer by 
> using an expression in a specific class. This portion of the mapfile is 
> dynamically generated and when it is done, it is sent to mapserver for 
> rendering.
> My problem is that I have to select between 10 - 400 features at a time 
> and I noticed when I have a lot of features there is a severe 
> performance degradation in mapserver (takes a lot of time to render or 
> even times out).
> Right now, my expression is built using regular expressions: something like:
> *EXPRESSION /^ITEM1$|^ITEM2$|^ITEM3$|^ITEM4$/*
> This works ok, but as I said has a performance penalty when you reach 
> ~400 items.  My data is selected from a shapefile layer which has about 
> 5500 items.
> 
> Since I wouldn't be using the regular expressions at full capacity (I'm 
> matching the full name), I might rewrite the expression using something 
> like:
> *EXPRESSION ( ([NAME]=="ITEM1") OR ([NAME]=="ITEM2") OR 
> ([NAME]=="ITEM3") OR ([NAME]=="ITEM4") )*
> 
>  From the documentation I see that:
> /Regular expression with MapServer work similarly to string comparison, 
> but allow more complex operation. They are slower than pure string 
> comparisons, but might be still faster than logical expression. As with 
> the string comparison use regular expressions, a FILTERITEM or a 
> CLASSITEM has to defined, respectively.
> 
> /I would like to know if there is an efficient way of selecting a list 
> of elements from a layer, or what are your recommendations.
> 
> Also - have there been significant changes in performance for this issue 
> from mapserver 4.10 (I am now migrating to mapserver 5.4)?
> 
> Thanks,
> Adrian



More information about the mapserver-users mailing list