Allow additional data to be requested for API GET calls to minimise N+1 performance problem
Like many relational-defined repositories, obtaining data via the identity api can sometmes suffer from what is known as the "N+1" problem. This is when you want to list all objects of a certain class (e.g. users, projects) and also get related information (e.g roles) - which can often result in one GET for the list of objects itself, followed by GET's for each item in the list to obtain the related data. Often, such a query could be implemented in one go by the underlying storage layer (e.g. SELECT/JOIN in SQL) if only you could express the query correctly via the REST API.
Blueprint information
- Status:
- Complete
- Approver:
- None
- Priority:
- Not
- Drafter:
- Henry Nash
- Direction:
- Approved
- Assignee:
- Henry Nash
- Definition:
- Drafting
- Series goal:
- None
- Implementation:
- Implemented
- Milestone target:
- None
- Started by
- Steve Martinelli
- Completed by
- Steve Martinelli
Related branches
Related bugs
Sprints
Whiteboard
This was one of the items discussed during the Havana keystone scaling and performance summit session: https:/
Would like to coordinate with Gabriel Hurley for this, as I know he's both opinionated and the biggest stakeholder on the topic -dolph
(stevemar) 2016-02-02: marking this as completed. implemention specific to this problem has been idle for years, but we've made numerous improvements to scalability and performance of keystone since it has been registered. we can create additional specs/blueprint