Improve performance of fetching stats metadata (#124428)
This commit is contained in:
parent
242aae514e
commit
70fc8fa2eb
1 changed files with 24 additions and 22 deletions
|
@ -4,7 +4,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import threading
|
import threading
|
||||||
from typing import TYPE_CHECKING, Literal, cast
|
from typing import TYPE_CHECKING, Final, Literal
|
||||||
|
|
||||||
from lru import LRU
|
from lru import LRU
|
||||||
from sqlalchemy import lambda_stmt, select
|
from sqlalchemy import lambda_stmt, select
|
||||||
|
@ -33,6 +33,14 @@ QUERY_STATISTIC_META = (
|
||||||
StatisticsMeta.name,
|
StatisticsMeta.name,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
INDEX_ID: Final = 0
|
||||||
|
INDEX_STATISTIC_ID: Final = 1
|
||||||
|
INDEX_SOURCE: Final = 2
|
||||||
|
INDEX_UNIT_OF_MEASUREMENT: Final = 3
|
||||||
|
INDEX_HAS_MEAN: Final = 4
|
||||||
|
INDEX_HAS_SUM: Final = 5
|
||||||
|
INDEX_NAME: Final = 6
|
||||||
|
|
||||||
|
|
||||||
def _generate_get_metadata_stmt(
|
def _generate_get_metadata_stmt(
|
||||||
statistic_ids: set[str] | None = None,
|
statistic_ids: set[str] | None = None,
|
||||||
|
@ -52,23 +60,6 @@ def _generate_get_metadata_stmt(
|
||||||
return stmt
|
return stmt
|
||||||
|
|
||||||
|
|
||||||
def _statistics_meta_to_id_statistics_metadata(
|
|
||||||
meta: StatisticsMeta,
|
|
||||||
) -> tuple[int, StatisticMetaData]:
|
|
||||||
"""Convert StatisticsMeta tuple of metadata_id and StatisticMetaData."""
|
|
||||||
return (
|
|
||||||
meta.id,
|
|
||||||
{
|
|
||||||
"has_mean": meta.has_mean, # type: ignore[typeddict-item]
|
|
||||||
"has_sum": meta.has_sum, # type: ignore[typeddict-item]
|
|
||||||
"name": meta.name,
|
|
||||||
"source": meta.source, # type: ignore[typeddict-item]
|
|
||||||
"statistic_id": meta.statistic_id, # type: ignore[typeddict-item]
|
|
||||||
"unit_of_measurement": meta.unit_of_measurement,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class StatisticsMetaManager:
|
class StatisticsMetaManager:
|
||||||
"""Manage the StatisticsMeta table."""
|
"""Manage the StatisticsMeta table."""
|
||||||
|
|
||||||
|
@ -100,6 +91,10 @@ class StatisticsMetaManager:
|
||||||
and self.recorder.thread_id == threading.get_ident()
|
and self.recorder.thread_id == threading.get_ident()
|
||||||
)
|
)
|
||||||
results: dict[str, tuple[int, StatisticMetaData]] = {}
|
results: dict[str, tuple[int, StatisticMetaData]] = {}
|
||||||
|
id_meta: tuple[int, StatisticMetaData]
|
||||||
|
meta: StatisticMetaData
|
||||||
|
statistic_id: str
|
||||||
|
row_id: int
|
||||||
with session.no_autoflush:
|
with session.no_autoflush:
|
||||||
stat_id_to_id_meta = self._stat_id_to_id_meta
|
stat_id_to_id_meta = self._stat_id_to_id_meta
|
||||||
for row in execute_stmt_lambda_element(
|
for row in execute_stmt_lambda_element(
|
||||||
|
@ -109,10 +104,17 @@ class StatisticsMetaManager:
|
||||||
),
|
),
|
||||||
orm_rows=False,
|
orm_rows=False,
|
||||||
):
|
):
|
||||||
statistics_meta = cast(StatisticsMeta, row)
|
statistic_id = row[INDEX_STATISTIC_ID]
|
||||||
id_meta = _statistics_meta_to_id_statistics_metadata(statistics_meta)
|
row_id = row[INDEX_ID]
|
||||||
|
meta = {
|
||||||
statistic_id = cast(str, statistics_meta.statistic_id)
|
"has_mean": row[INDEX_HAS_MEAN],
|
||||||
|
"has_sum": row[INDEX_HAS_SUM],
|
||||||
|
"name": row[INDEX_NAME],
|
||||||
|
"source": row[INDEX_SOURCE],
|
||||||
|
"statistic_id": statistic_id,
|
||||||
|
"unit_of_measurement": row[INDEX_UNIT_OF_MEASUREMENT],
|
||||||
|
}
|
||||||
|
id_meta = (row_id, meta)
|
||||||
results[statistic_id] = id_meta
|
results[statistic_id] = id_meta
|
||||||
if update_cache:
|
if update_cache:
|
||||||
stat_id_to_id_meta[statistic_id] = id_meta
|
stat_id_to_id_meta[statistic_id] = id_meta
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue