Skip to content

Commit

Permalink
Speed up remixables query by a lot (#1651)
Browse files Browse the repository at this point in the history
  • Loading branch information
raymondjacobson committed Jul 15, 2021
1 parent 70d7b44 commit 5629dc0
Showing 1 changed file with 23 additions and 20 deletions.
43 changes: 23 additions & 20 deletions discovery-provider/src/queries/get_remixable_tracks.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
from sqlalchemy import desc
from src.models import Track, Stem
from src.queries.query_helpers import create_save_repost_count_subquery, \
populate_track_metadata, add_users_to_tracks, decayed_score
from src.models import Track, Stem, AggregateTrack
from src.queries.query_helpers import (
populate_track_metadata,
add_users_to_tracks,
decayed_score,
)
from src.utils.db_session import get_db_read_replica
from src.utils import helpers


def get_remixable_tracks(args):
"""Gets a list of remixable tracks"""
db = get_db_read_replica()
Expand All @@ -15,36 +19,35 @@ def get_remixable_tracks(args):
# Subquery to get current tracks that have stems
remixable_tracks_subquery = (
session.query(Track)
.join(Stem, Stem.parent_track_id == Track.track_id)
.filter(
Track.is_current == True,
Track.is_unlisted == False,
Track.is_delete == False
)
.distinct(Track.track_id)
.subquery()
.join(Stem, Stem.parent_track_id == Track.track_id)
.filter(
Track.is_current == True,
Track.is_unlisted == False,
Track.is_delete == False,
)
.distinct(Track.track_id)
.subquery()
)

count_subquery = create_save_repost_count_subquery(session, "track")
count_subquery = session.query(
AggregateTrack.track_id.label("id"),
(AggregateTrack.repost_count + AggregateTrack.save_count).label("count"),
).subquery()

query = (
session.query(
remixable_tracks_subquery,
count_subquery.c["count"],
decayed_score(
count_subquery.c["count"],
remixable_tracks_subquery.c.created_at
).label("score")
count_subquery.c["count"], remixable_tracks_subquery.c.created_at
).label("score"),
)
.select_from(remixable_tracks_subquery)
.join(
count_subquery,
count_subquery.c["id"] == remixable_tracks_subquery.c.track_id
)
.order_by(
desc("score"),
desc(remixable_tracks_subquery.c.track_id)
count_subquery.c["id"] == remixable_tracks_subquery.c.track_id,
)
.order_by(desc("score"), desc(remixable_tracks_subquery.c.track_id))
.limit(limit)
)

Expand Down

0 comments on commit 5629dc0

Please sign in to comment.