osrm-backend icon indicating copy to clipboard operation
osrm-backend copied to clipboard

Lazily generate optional route path data

Open mjjbell opened this issue 3 years ago • 2 comments

Issue

Currently route results are annotated with additional path information, such as geometries, turn-by-turn steps and other metadata.

These annotations are generated even if they are not requested or returned in the response. Datasets needed to generate these annotations are loaded and available to the OSRM process even when unused.

This PR is a first step towards making the loading of these datasets optional. We refactor the code so that route annotations are only generated if explicitly requested and needed in the response

Specifically, we change the following annotations to be lazily generated:

  • Turn-by-turn steps
  • Route overview geometry
  • Route segment metadata

For example. a /route/v1 request with steps=false&overview=false&annotations=false would no longer call the following data facade methods:

  • GetOSMNodeIDOfNode
  • GetTurnInstructionForEdgeID
  • GetNameIndex
  • GetNameForID
  • GetRefForID
  • GetTurnInstructionForEdgeID
  • GetClassData
  • IsLeftHandDriving
  • GetTravelMode
  • IsSegregated
  • PreTurnBearing
  • PostTurnBearing
  • HasLaneData
  • GetLaneData
  • GetEntryClass

Requests that include segment metadata and/or overview geometry but not turn-by-turn instructions will also benefit from this, although there is some interdependency with the step instructions - a call to GetTurnInstructionForEdgeID is still required. Requests for OSM annotations will understandably still need to call GetOSMNodeIDOfNode.

Making these changes unlocks the optional loading of data contained in the following OSRM files:

  • osrm.names
  • osrm.icd
  • osrm.nbg_nodes (partial)
  • osrm.ebg_nodes (partial)
  • osrm.edges

Tasklist

Requirements / Relations

#5838

mjjbell avatar Jun 03 '21 21:06 mjjbell

After this change, and assuming a mechanism is implemented for optionally loading datasets, I estimate about ~15% memory saving when using the default car profile. E.g. for france-latest, it would save about 700MB.

mjjbell avatar Jun 03 '21 23:06 mjjbell

This is great!

TheMarex avatar Dec 17 '21 17:12 TheMarex