Kai,

  partial answer:

On 09/13/2011 02:07 AM, Kai Krueger wrote:
2) Currently all the (diff-) import is done in a single transaction.
Therefore other db users (e.g. renderers) don't see any change until the
full transaction is committed. In order to do things in parallel,
however, there needs to be intermediary commits

[...]

The question though is this valid? For the initial import this is
probably not a problem as there won't be any db users concurrently until
the import is complete. However, diff imports with concurrent rendering
is a different matter. What will committing pending ways do to rendering?

Renderers use the geometry tables; the "pending" way is in the data table where it will not usually be touched by renderers. So I don't see a problem here. I am however not familiar with internal Postgres processing and I could imagine that there is a speed penalty in commiting pending ways as opposed to resetting the pending flag in the same transaction where it was set.

3) Currently the string cache is not thread safe. It is possible to
disable it via a single preprocessor define and then parallelizing at
least doesn't lead to crashes, but I assume it is there for a good
reason. Presumably with a bit of work, it should be possible to get the
string cache thread safe though as well. So assuming the other two
points aren't show stoppers, this should be possible to fix.

Have you considered multiprocessing (i.e. fork) instead of multithreading - would this perhaps make these things go away elegantly? Personally I abhor multithreading for the complexity it brings at (usually) little gain compared to simply forking a few worker processes but of course YMMV especially if you want tight communication between workers.

Bye
Frederik

--
Frederik Ramm  ##  eMail [email protected]  ##  N49°00'09" E008°23'33"

_______________________________________________
dev mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/dev

Reply via email to