Add an index for devices and config entries to the entity registry #107516
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Proposed change
As more entities have been added, the run time cost of looking up entities by device and config entries has increased. For reference, the entity registry storage is now 4-5MB on most of my production systems. The number of entities in the registry continues to grow as more integrations are updated so the problem will continue to get worse over time.
More integrations have migrations of unique ids which tend to stay in the code base for a very long time. They are frequent callers of
er.async_entries_for_device
ander.async_entries_for_config_entry
. Both of these functions have to do a linear search over the entire registry to find matching entries since there is no index fordevice_id
orconfig_entry id
Side node: Ideally we would change these functions to return a set in another set so removing the the index is cheap, but a lot of the tests are expecting explicit order because its been a list even though its not needed
Type of change
Additional information
Checklist
ruff format homeassistant tests
)If user exposed functionality or configuration variables are added/changed:
If the code communicates with devices, web services, or third-party tools:
Updated and included derived files by running:
python3 -m script.hassfest
.requirements_all.txt
.Updated by running
python3 -m script.gen_requirements_all
..coveragerc
.To help with the load of incoming pull requests: