Oops, I sent my previous email to the wrong list ...<br><br><div class="gmail_quote">---------- Forwarded message ----------<br>From: <b class="gmail_sendername">Brett Henderson</b> <span dir="ltr"><<a href="mailto:brett@bretth.com">brett@bretth.com</a>></span><br>
Date: 13 October 2012 15:43<br>Subject: Streaming Replication<br>To: osmosis-dev <<a href="mailto:osmosis-dev@openstreetmap.org">osmosis-dev@openstreetmap.org</a>><br><br><br>Hi All,<br><br>For those of you who currently use the minute diffs to keep a local database up to date, you may be interested to know that a new form of replication has hit the street.<br>
<br>The current replication system is based on a series of static replication files that are placed on a web server for clients to download as described here:<br>
<a href="http://wiki.openstreetmap.org/wiki/Planet.osm/diffs#Using_the_replication_diffs" target="_blank">http://wiki.openstreetmap.org/wiki/Planet.osm/diffs#Using_the_replication_diffs</a><br><br>It is a very simple mechanism and works well for the existing daily, hourly and minutely replication feeds.  Unfortunately it doesn't work well for sub-minute replication because it becomes far too "chatty".  On the server side, the current feeds are generated from cron which also works well down to one minute intervals, but the overhead of launching a new process and connecting to the database for every replication interval also becomes too inefficient for shorter intervals.<br>

<br>To solve this, a new streaming replication mechanism has been developed.  Under the covers the same database queries are utilised, but the process performing the queries runs continously and polls the database for changes at a shorter interval.  It is currently set to poll every 10 seconds, but it can be reduced further if required.  The network transport is also continuous and holds a single HTTP connection open for the lifetime of communication between the server and client.  It is all implemented within the latest version of Osmosis 0.41.  If you wish to experiment with the server-side tasks however, several bugs have been fixed in the latest development version.  Internally it uses the JBoss Netty framework which means that it's all event-driven (ie. doesn't require a thread per client) and should theoretically support a large number of concurrent clients.<br>

<br>To quickly see this in action, point your browser at this URL and you should see new replication "state" data become available approximately every 10 seconds.<br><a href="http://planet.openstreetmap.org/replication/streaming/replicationState/current/tail" target="_blank">http://planet.openstreetmap.org/replication/streaming/replicationState/current/tail</a><br>

<br>New Osmosis tasks have been developed to consume this data.  For some basic instructions to help you get started, refer to this link:<br><a href="http://wiki.openstreetmap.org/wiki/Osmosis/Replication#Client-side_Streaming" target="_blank">http://wiki.openstreetmap.org/wiki/Osmosis/Replication#Client-side_Streaming</a><br>

<br>If you don't wish to use Osmosis, some basic documentation on the wire protocol is available here:<br><a href="http://wiki.openstreetmap.org/wiki/Osmosis/Replication#Streaming_Replication_Wire_Protocol" target="_blank">http://wiki.openstreetmap.org/wiki/Osmosis/Replication#Streaming_Replication_Wire_Protocol</a><br>

<br>This is very much experimental and bugs will undoubtedly be encountered to please be wary about trusting it to update your database if you've just spent two weeks importing a planet file.  However, I'd love to see it get some usage and would welcome any feedback.  This is not intended for use in updating a local planet file as the existing daily files are better suited to that.  For databases that can tolerate a minute delay, the existing mechanism is very simple and has proven to be fairly reliable.  But if you really need current access to data, and can cope with the additional complexity, this should be useful.  The current 10 second delay is not a lower limit, but is a good starting point for now.<br>

<br>Cheers,<br>Brett<br><br>
</div><br>