<div class="gmail_quote">On Tue, May 5, 2009 at 6:16 PM, Brett Henderson <span dir="ltr"><<a href="mailto:brett@bretth.com">brett@bretth.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Ian Dees wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

Forgive me for injecting into this conversation part-way through, but would it make sense to offer an HTTP stream of the complete contents of all changesets as they are closed and applied to the database?<br>
</blockquote>
How do you mean exactly?  For it to be reliable it needs to be persisted somewhere.  And that presumably means using the existing database in some way.  And that is the problem we're trying to solve :-)</blockquote><div>
<br>Originally, my suggestion involved running an HTTP server on some alternative port on the API server. When a client connected to this HTTP server, the server would write out changesets as XML as soon as they are finished writing to the database and closed by the client. They would be streamed as multipart MIME messages.<br>
<br>One complication: I realized that there are several API servers. This would definitely cause concurrency problems.<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
To reduce load on the server, the stream could be proxied or mirrored to other machines.<br>
</blockquote>
In a sense that's what osmosis is doing.  Granted it's not a stream as such, but a stream approach implies a queue per client which isn't somewhere I want to go just yet.  At least not until I get the current system working properly.<br>

<br>
</blockquote></div><br>A client to the aforementioned stream could do many things:<br>0. Show some cool realtime stats on a rotating globe.<br>1. Filter the stream so that only changes with nodes in a particular bbox are passed through to the next client.<br>
2. Automatically apply the exact same changesets to its copy of the database in mostly-realtime.<br>3. Slice up the stream into minute-sized chunks and save them off into a file.<br><br>You're right -- it sounds an awful lot like what Osmosis currently does :).<br>