Skip to content

Commit

Permalink
add index on timed_beliefs for faster search (#167)
Browse files Browse the repository at this point in the history
* fix application of unique index on timed_beliefs, also add index on the same fields so searching is sped up

Signed-off-by: Nicolas Höning <nicolas@seita.nl>

* flake8

Signed-off-by: Nicolas Höning <nicolas@seita.nl>

* the order of the fields matters, has to match the query's order

Signed-off-by: Nicolas Höning <nicolas@seita.nl>

* add unique constraints separately, as it needs the probability fields as well

Signed-off-by: Nicolas Höning <nicolas@seita.nl>

* flake8

Signed-off-by: Nicolas Höning <nicolas@seita.nl>

* no UNIQUE index - without probability it makes no sense, with is covered by primary key

Signed-off-by: Nicolas Höning <nicolas@seita.nl>

* remove unused import

Signed-off-by: Nicolas Höning <nicolas@seita.nl>

* do not include belief_horizon in index, just add as column (we are using min() on it)

Signed-off-by: Nicolas Höning <nicolas@seita.nl>

* black

Signed-off-by: Nicolas Höning <nicolas@seita.nl>

* black with version we use in pre-commit

Signed-off-by: Nicolas Höning <nicolas@seita.nl>

---------

Signed-off-by: Nicolas Höning <nicolas@seita.nl>
  • Loading branch information
nhoening committed Mar 1, 2024
1 parent 4c8fa25 commit 9932242
Showing 1 changed file with 17 additions and 16 deletions.
33 changes: 17 additions & 16 deletions timely_beliefs/beliefs/classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@
)
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.ext.hybrid import hybrid_method, hybrid_property
from sqlalchemy.orm import Session, backref, has_inherited_table, relationship
from sqlalchemy.orm import Session, backref, declarative_mixin, relationship
from sqlalchemy.orm.util import AliasedClass
from sqlalchemy.schema import UniqueConstraint
from sqlalchemy.schema import Index
from sqlalchemy.sql.elements import BinaryExpression
from sqlalchemy.sql.expression import Selectable

Expand Down Expand Up @@ -174,6 +174,7 @@ def source_id(self):
return None


@declarative_mixin
class TimedBeliefDBMixin(TimedBelief):
"""
Mixin class for a table with beliefs.
Expand All @@ -182,17 +183,17 @@ class TimedBeliefDBMixin(TimedBelief):

@declared_attr
def __table_args__(cls):
if has_inherited_table(cls):
return (
UniqueConstraint(
"event_start",
"belief_horizon",
"sensor_id",
"source_id",
name="_one_belief_by_one_source_uc",
),
)
return None
return (
Index(
f"{cls.__tablename__}_search_session_idx",
"event_start",
"sensor_id",
"source_id",
postgresql_include=[
"belief_horizon", # we use min() on this
],
),
)

event_start = Column(DateTime(timezone=True), primary_key=True, index=True)
belief_horizon = Column(Interval(), nullable=False, primary_key=True)
Expand Down Expand Up @@ -1500,9 +1501,9 @@ def resample_events(
column_functions = {
"event_value": "mean",
"source": "first", # keep the only source
belief_timing_col: "max"
if belief_timing_col == "belief_time"
else "min", # keep only most recent belief
belief_timing_col: (
"max" if belief_timing_col == "belief_time" else "min"
), # keep only most recent belief
"cumulative_probability": "mean", # we just have one point on each CDF
}
df = downsample_beliefs_data_frame(
Expand Down

0 comments on commit 9932242

Please sign in to comment.