mapquest / mapquest-osm-server Goto Github PK
View Code? Open in Web Editor NEWA scalable OpenStreetMap API server built over a distributed key/value store.
License: Other
A scalable OpenStreetMap API server built over a distributed key/value store.
License: Other
Once support for adding incremental changes to the data store is added (see #14, osmChange
support to the dbmgr
tool), we would need a way to invalidate 'stale' entries from the caches maintained inside the front-end servers.
A (too simple) solution could be to have the front-ends periodically reset their caches, for example by reading a 'generation count' of some kind from the data store at regular intervals and resetting their caches if this count has changed. Such an approach would however be wasteful because updates to the data store are likely to be frequent (once a minute with the Minutely Mapnik process), but with each update only touching a very small number of elements.
This tool would be useful for creating smaller sized extracts for testing the handling of a 'full' planet dump (issue #4).
Investigate more cache efficient ways to group OSM elements.
"Real-life" usage (e.g., map queries from JOSM) appear to have a significant degree of geographical locality to them.
It may help to group OSM elements in a different manner, so that repeated queries in the same geographical area are served with fewer compute resources (and faster).
This ticket tracks the following tasks:
<-- References -->
In the implementation of the /map
API, we can reduce the data transferred between the data store and the front end by modifying the implementation in the following way:
dbmgr
tool./map
API, use these node coordinates to immediately filter out nodes falling outside the desired bounding box.Use Cyclone instead of TornadoWeb, for the front end in the Python prototype. Cyclone is built over Python-Twisted.
The benefits would be:
Create a test tool that verifies that the contents of the data store match that in a given planet dump.
(Related to issue #7)
Return an additional element in the response to a /capabilities
query indicating the upstream server to use for POST
and PUT
operations.
The code currently accesses membase in memcache compatibility mode. This is sub-optimal in a couple of ways:
Choose and use a suitable interface library so that a Membase backend can be accessed efficiently.
Package the server's source code using distutils, so that it can be easily distributed.
Move project documentation to the main source tree from the wiki.
This would make it easier to keep the project's documentation and code in sync.
The PBF distribution format is space-efficient compared to XML, and parses faster.
Add support for parsing PBF input to the dbmgr tool.
Create user-centric documentation covering the care and feeding of the API Server.
A rough outline of this article would be:
The guide would need be written in using open-source documentation tools that are in common use in the open-source eco-system, say one of LaTeX, ConTeXt or DocBook.
A complete planet.osm dump currently holds of the order of a billion nodes, ninety million ways and just a bit less than a million relations, per the current statistics for the OSM database.
In order to be able to deal with a data set of this size in a reasonable amount of time, the db-mgr
ingestion tool needs to be sped up considerably, and also made frugal in its memory consumption.
Slab configuration information is used by the dbmgr
tool to group OSM elements into slabs.
The dbmgr
tool and the front-end currently retrieve slab related information from the system configuration file (config/osm-api-server.cfg
). It would be more robust for the front-end to retrieve slab information from the data store directly.
Configuration information in the data store should also be versioned, so that incompatible configuration schemas can be detected.
It would be useful if meta-data about the contents of the data-store could be queried externally. For example:
Store data in the data store encoded using protobufs. If done right, this change has the potential to reduce the storage requirements for the back end.
Incremental updates to the map are distributed by the OpenStreetMap project in the form of OsmChange files. These need to be supported by the ingestor tool.
Open Issue: OsmChange files do not contain <changeset>
elements; for now, the ingestor would need to fetch these elements from an upstream server.
See also: issue #22 which tracks related changes to the front-end.
XAPI offers the ability to query the map using complex predicates.
For example:
/api/0.6/node[amenity=hospital]
<tag k="amenity" v="hospital" />
/api/0.6/*[
key1=
value1][
key2=
value2]...
/api/0.6/relation[not(way)]
way
members./api/0.6/node[@user=
name]
Investigate how best these queries could be implemented in the current architecture.
"Full" planet dumps contain the entire history of the map. In order to support full dumps, we would need to:
It would be useful for this API server to redirect requests that it cannot handle (using an appropriate HTTP response code) to an upstream server.
Examples of such requests include:
/create
URIs or POST
requests to URIs.This feature would allow this API server to act as a fast and scalable "front end" for the current OSM API server.
See also: issue #12.
Since ingestion of a full OSM dump can take a long while, having an option to 'resume' from some point in the middle of a dump could be useful.
For example, a --resume=
type:
id option, that would instruct the ingestor tool to resume ingestion from an element of type type and id id. The type specifier would be one of changeset
, node
, way
or relation
.
Provide a way for users to ingest data for just the geographical region of the map that they are interested in.
This would help users who want to host a smaller subset of the global map.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.