RFC 33: Removing msLayerWhichItems()...
Steve Lime
Steve.Lime at DNR.STATE.MN.US
Thu Jul 12 16:52:42 EDT 2007
I'm starting to think this is a 5.2 change. It's definitely gnarly and the effects are not understood
well enough...
Steve
>>> On 7/12/2007 at 1:08 PM, in message <46966E28.2050306 at mapgears.com>, Daniel
Morissette <dmorissette at MAPGEARS.COM> wrote:
> Steve Lime wrote:
>> The performance concern is real although I don't know how big a deal it is
> for all drivers. I
>> believe with shapefiles you get everything anyway. Not sure about others.
> How would OGR
>> be impacted?
>>
>
> Your comment made me doubt so I ran both shapefiles and OGR data sources
> in the debugger and confirmed that when rendering a map, they both load
> only the attributes that are required.
>
> In the shapefile case I believe you still need to do the file I/O to
> read the full attribute record from disk, but only the values of the
> required attributes are strdup'd and stored in the shape->values[] array.
>
> OGR works in a similar way: the OGRFeature object returned by OGR
> contains all the attributes but we only copy the required attributes to
> the shape->values[] that is seen by MapServer.
>
> I think the performance gain/loss would be more significant for
> shapefiles than for OGR data sources for this reason.
>
>> msLayerWhichItems sets up the item indexes and you still need that for
> queries since CLASSes
>> come into play.
>>
>
> Plus, OGR uses special item indexes for some special OGR attributes that
> are extracted from the style strings (OGR:LabelText, OGR:LabelAngle, and
> OGR:LabelSize), so if we get rid of item indexes we'll need to think of
> another way to handle that.
>
>>
>> One way to mitigate the performance impact might be to allow a user to
> explicitly set the ITEMS
>> array in the configuration file. I'm hoping that with PostGIS and Oracle
> Spatial that's essentially
>> what you do with the sub-selects. An added benefit of that would be that
> inline features could
>> now have attributes:
>>
>> LAYER
>> NAME 'anInlineLayer'
>> TYPE POLYGON
>> STATUS OFF
>> ITEMS name, type, area END
>> LABELITEM 'name'
>> FEATURE
>> POINTS ... END
>> VALUES 'St. Paul', 'CITY', '53045098.12' END
>> END
>> ...
>> END
>>
>
> I thought about providing the ability to specify the list of items in
> the layer as a possible solution as well, but then I realized that this
> was a move backwards for users since MapServer used to determine the
> list of items automatically, and from now on users would be required to
> do that manually for all layers if they care about performance.
>
>
> I find it odd for me to be arguing *for* keeping msLayerWhichItems()
> since I never really understood nor liked it until today. In the
> interest of getting this done for 5.0 and if everybody wants to get rid
> of it then I won't object any more. I'll be happy with an optional
> ITEMS...END block for those who really care about that little bit of
> performance.
>
> Daniel
More information about the mapserver-dev
mailing list