Allow additional data to be requested for API GET calls to minimise N+1 performance problem

Registered by Henry Nash

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

Sprints

Whiteboard

This was one of the items discussed during the Havana keystone scaling and performance summit session: https://etherpad.openstack.org/havana-keystone-performance

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/blueprints/bugs as needed

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.