A techy post, since we've not had one for a while!
Over the weekend we rolled out some new infrastructure that has taken most of Simon's time for the last month.
And thanks to donations and grants that we received, we now have a machine that works primarily to churn out imports without slowing down the main server in the evenings, as used to be the case.
Versioned database for routing
We now run a versioned database for the routing. Effectively each import of the OpenStreetMap data to make a routing database is now a dated and separate database. Previously we prepared an import and moved it into place, then shortly removing the old one.
The main benefit of this is that when a new set of data has been imported from OSM we can switch to using it instantly without having to shutdown the database.
The other benefits are that it is much clearer where the routing tables are – and has also resulted in a useful purge of some unneeded data.
The ultimate intention of this work is to enable us to run a much more frequent import cycle. Currently the data is refreshed weekly.
More efficient route generation
The itinerary listing details that you get when you plan a route are extracted from tables generated during the import (rather than re-calculated for each route).
There were quite a few inefficiencies here, and we've restructured how the data is extracted to make it quicker. This forms the conclusion of work to speed up the system for mobile use.
This will mainly be of benefit to API (e.g. mobile phone) users, as the website version itself still has to generate the maplets (which we plan to change in some way in due course, following user feedback).
These changes should not have affected the API output, except hopefully making it faster!
The routing output also now includes text like 'bear left', 'sharp right', or even 'double back' with the segments as it did quite a while ago. (This is the cs:turn data in the API output.)