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

Adrian Popa adrian_gh.popa at romtelecom.ro
Tue Jul 14 05:05:10 EDT 2009


Hello Nikolai,

As far as you know - the Layers/Classes are processed in paralel 
(threads)? Would it even be more efficient not to use expressions, but 
to use simple string matchings and dynamically generate 10-400 Classes 
in a layer (one class per item)?

What would be the best/most scalable approach?

Thank you,
Adrian

Nikolai Nikolov wrote:
>
> Hi Adrian,
>
>  
>
> I have used long EXPRESSION list in the past, but my data are 
> “static”, so eventually I modified the map data and removed the 
> polygons I didn’t want to render.
>
>  
>
> I could suggest to you to use in your map file several LAYERs or 
> CLASSes to “spread around” long EXPRESSION lists. Those LAYERs or 
> CLASSes would be identical but for the EXPRESSION lists.  You could 
> put a limit of let’s say 10 selected features per CLASS definition.
>
>  
>
> Best regards,
>
> Nick
>
>  
>
> ------------------------------------------------------------------------
>
> *From:* mapserver-users-bounces at lists.osgeo.org 
> [mailto:mapserver-users-bounces at lists.osgeo.org] *On Behalf Of *Adrian 
> Popa
> *Sent:* 14 July 2009 07:15
> *To:* mapserver-users at lists.osgeo.org
> *Subject:* [mapserver-users] Performance in regular expressions or an 
> alternative way to select a list of features
>
>  
>
> 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
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/mapserver-users/attachments/20090714/10ec27df/attachment-0001.html


More information about the mapserver-users mailing list