[OSM-dev] Is there a way to use simple schema without hstore
Andreas Kalsch
andreaskalsch at gmx.de
Sat Nov 20 12:43:04 GMT 2010
Am 20.11.10 01:38, schrieb Brett Henderson:
> On Fri, Nov 19, 2010 at 7:37 PM, Andreas Kalsch <andreaskalsch at gmx.de
> <mailto:andreaskalsch at gmx.de>> wrote:
>
> Hi Brett,
>
> thanks for your elaborate answer! Now I am up to date. Some ideas regarding my use case ...
>
> Am 18.11.10 23:50, schrieb Brett Henderson:
>> Hi Andreas,
>>
>> The change was made mostly for performance reasons. With a full planet imported into the
>> database, bounding box style queries are now approximately 10 times faster. This is due to a
>> couple of reasons:
>>
>> * All data (with the exception of relations) is now clustered by geographical location.
>> This drastically improves performance where data is being processed for a limited area.
>> * The nodes and ways tables are the only tables that have a geometry column, thus other
>> data must be embedded in those tables in order to make use of clustering.
>>
> My concept is always to use _1_ table for all geometries and to create extractions when I need
> them. Because a geom column can store any type, so it is a more unifying concept.
>
>
> I'm not following. Are you suggesting that node and way tables be merged?
For my project I create geometries from features in a separate step and put them all in one table.
This is more for playing than for a more special purpose like map rendering. So I don't want to
suggest any changes here.
>
>
>> I don't understand your comment regarding NoSQL. The main change is that now you will have
>> to deal with a more complex hstore column type on the nodes/ways tables, but otherwise the
>> same data still exists and can still be manipulated with SQL statements. The data is less
>> relational that it was previously, but tag data is not terribly useful without access to
>> parent entities so grouping them together shouldn't result in loss of functionality.
>>
>> You can still populate separate tags tables if you wish by running your own separate query to
>> pull the hstore column apart.
> This is what I need to do sooner or later, when I will update. It's important for me to use a
> separate table for tags, because I run a script that will correct the tags of relations (from
> outer ways to relations), and I don't want to rewrite this and other scripts that depend on
> this schema every time the version changes.
> Running an extra script that fetches the hstore tags and puts them into a separate table will
> add the time that PBF gave me ;(
> My main concern is that with the next big schema update I _have_ to patch the schema. On the
> long run it is great to be conservative about such changes or *)
>
>
> My best suggestion is to continue running the old Osmosis. The old version still works so don't
> upgrade. As Frederik suggests you can run the two versions alongside each other and pipe data
> between them as necessary.
Can you point me to an example?
>
>
>>
>> If you're applying diffs to the database you can enhance the osmosisUpdate() function
>> (initially empty, but can be customised) to keep your separate tags tables up to date during
>> each diff application. You will need to run the "pgsql_simple_schema_0.6_action.sql" script
>> against the database so that all actions during a diff are logged and can be used by your
>> osmosisUpdate function to know which records need to be re-processed.
> Is it possible to truncate the actions table for myself so that a separate script can access
> the changes?
>
> This is another important point. In the moment, I manually populate my own "current_features"
> tables after an update that are populated with all features, whose tstamp is >= the time of
> the last update. A little overhead ... I see that this table exists in 0.36 as well, so I
> could use it, if I can truncate it manually?
>
>
> As Sarah suggests, the way to do this is to create your own table and populate it from the actions
> table within the osmosisUpdate function. The overhead in doing this should be relatively small.
This is what I do now - creating an additional table "action"
>
>
>> The older Osmosis 0.36 is still available so you don't have to upgrade. It remains
>> compatible with 0.6 XML files. Finally, if there is enough demand for the older schema style
>> the old tasks can be pulled back out of SVN and run alongside the new ones, but I'm not keen
>> to do that without good reason. I did consider trying to support both styles of table in the
>> same tasks by dynamically detecting what tables are installed, but it increases the code
>> complexity considerably and I didn't think the effort was worthwhile.
> *) With that, you would provide a downward compatible solution that I would appreciate a lot!
>
>
> I'm hesitant to do this for one person's use case. I don't mean to be unhelpful, but I have to be
> very careful about where spend my limited time on Osmosis and for this reason I try to keep things
> as simple as possible. That sometimes means removing old obsolete functionality and breaking
> compatibility from time to time.
>
> Can you make do with the older version for now? If enough demand comes up for the old style
> schema then I'll look into it. Alternatively I'm always happy to accept a patch :-)
>
>
> Is it necessary that Osmosis makes the schema checks? What about giving each schema a unique
> ID and then let the user point Osmosis to this ID and let it fail, if the user has installed
> the wrong schema?
>
>
> I don't understand your suggestion. The schema currently has a schema_info which contains a
> version number, that is all. It fails if the wrong version is detected. But you can tell it to
> ignore the schema version with validateSchemaVersion=no where it will blindly attempt to use the
> schema and fail if it can't find the tables/columns it needs.
>
> Brett
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstreetmap.org/pipermail/dev/attachments/20101120/95943ac6/attachment.html>
More information about the dev
mailing list