leijurv left a comment (osm2pgsql-dev/osm2pgsql#2482)

Okay, I will try to figure out how to get a table of ways that changed 👍 

For the case of a new way that connects existing ways, yes that's the rub. Your 
case can already happen currently, when a way is itself larger than the tile. 
It's actually even worse than that, because ST_LineMerge will **stop** merging 
when the degree of a node goes from 2 to 3, so adding a way can actually 
**split** a road geometry. There were broadly two ways to do this: 1. write 
extremely complicated recursive CTE queries to try to fix up exactly the "edit" 
and no further (in your case, it would just connect those two geometries 
without recursively exploring them on the input table side) or 2. explore the 
entire geometry, delete the entire geometry, re-ST_LineMerge it. I picked the 
latter in this PR.

I actually think multithreading would help specifically because of how the 
recursive CTE requires many serial lookups, that is I/O bound but there is a 
difference between being bound by I/O latency for dependent/sequential random 
lookup versus being bound by I/O throughput (whether the lookups are sequential 
or random). So if you were to have several tiles that are all expired, you 
would probably get a speedup with each thread expiring one of them, versus one 
thread expiring all sequentially (note: this PR doesn't quite do that, it uses 
joins to get postgres to do many tiles "at once" internally). But my point on 
multithreading was not actually about two threads that are both doing expiring, 
rather about render threads not being blocked by expiring threads, because the 
expiring threads (and the render threads) are doing dependent lookups through 
the GiST structure with inherent latency in the processor-side logic from one 
read to the next.

In any event I will think about this more 
https://github.com/leijurv/openstreetmap-carto/commit/b79c0fa3033ed5339643eb1b9590edc7e684dd28
 This is how I had it, but I think I'll need to use a totally different method 
(not tile merging at all). My initial hope is that whenever a way is added, 
updated, or deleted, I can simply add the exact (x,y) of both endpoints to a 
table of geometries to be updated, then the generalization can re-explore the 
geometry from there? That would be the happy / easy path, but I am probably 
missing something.

-- 
Reply to this email directly or view it on GitHub:
https://github.com/osm2pgsql-dev/osm2pgsql/pull/2482#issuecomment-4615223664
You are receiving this because you are subscribed to this thread.

Message ID: <osm2pgsql-dev/osm2pgsql/pull/2482/[email protected]>
_______________________________________________
Tile-serving mailing list
[email protected]
https://lists.openstreetmap.org/listinfo/tile-serving

Reply via email to