[OSM-Devserver] Schnelleres Rendern durch Preprozessing

Tobias Wendorff tobias.wendorff at uni-dortmund.de
So Nov 28 13:48:04 CET 2010


Am Sa, 27.11.2010, 18:35 schrieb Nop:
>
> Hallo!
>
> Am 18.05.2010 08:46, schrieb Jochen Topf:
>> On Mon, May 17, 2010 at 10:54:42PM +0200, Nop wrote:
>>> Normalerweise haben die Mapnik Layers eine ziemlich komplizierte
>>> SELECT-Anweisung, in der ein Haufen Abfragen auf die einzelnen Tags mit
>>> OR verknüpft werden. Die sind generell ziemlich unhandlich und wurden
>>> von der DB immer mit einem Table Scan abgehandlet, egal was ich an
>>> Tricks mit Indexen versucht habe.
>>>
>>> Ich mache mit den Daten ja ein Preprocessing, bevor sie in die DB
>>> kommen. Dabei gibt es einen Moment, wo ich bereits weiß, in welcher
>>> Layer bestimmte Objekte später angezeigt werden sollen. Also habe ich
>>> die Nummer dieser Layer mit in die DB geschrieben. Damit vereinfacht
>>> sich das Statement auf SELECT ... WHERE layer =<nummer>. Auf layer
>>> liegt natürlich ein Index. Ich habe den Eindruck, daß die DB jetzt den
>>> Index nutzt und die Tiles so deutlich schneller gerendert werden.
>>
>> Wenn Du eh schon weisst, was auf welchem Layer ist und alles nur auf
>> genau
>> einem Layer vorkommt, dann wäre es noch besser, für jeden Layer eine
>> eigene
>> Tabelle anzulegen. Dann ists nämlich ganz klar, dass er den
>> Geometrie-Index
>> auf dieser Tabelle benutzen kann. Bei der von Dir beschriebenen Lösung
>> muss
>> sich die Datenbank entscheiden, ob sie den Geometrie-Index benutzt oder
>> den
>> Layer-Index.
>
> Das mit einer eigenen Tabelle würde wieder ein anderes Datenbankschema
> voraussetzen, als es osm2pgsql benutzt. Ich habe nochmal ein wenig
> rumgespielt mit diesen Ideen, und bin dabei auf ein paar Erkenntnisse
> gestoßen, die dem einen oder anderen nützlich sein könnten.
>

Hast Du mal probiert,  einige Keys oder sogar Tags auf einen eigenen Layer
zu legen

Wenn es sich als "besser" erweisen würde, könnte man osm2pgsql sicher
erweitern.