Optimize recommendation query and remove unnecessary migrationUnverified
fd2d54c parent: 5641d4d modified
internal/cluster/jaccard.go +5 -7 | @@ -24,21 +24,19 @@ func (e *Engine) ComputeArticleRecommendations(ctx context.Context) error { | ||
| 24 | 24 | |
| 25 | 25 | _, err = tx.ExecContext(ctx, ` |
| 26 | 26 | INSERT INTO user_article_recommendations (user_did, feed_url, article_url, score) |
| 27 | - SELECT target, l.feed_url, l.article_url, SUM(us.jaccard) AS score | |
| 27 | + SELECT targets.target, l.feed_url, l.article_url, SUM(targets.jaccard) AS score | |
| 28 | 28 | FROM ( |
| 29 | - SELECT us.user_a AS target, s.user_did AS peer | |
| 29 | + SELECT us.user_a AS target, us.user_b AS peer, us.jaccard | |
| 30 | 30 | FROM user_similarity us |
| 31 | 31 | WHERE us.jaccard > 0.2 |
| 32 | 32 | UNION ALL |
| 33 | - SELECT us.user_b AS target, s.user_did AS peer | |
| 33 | + SELECT us.user_b AS target, us.user_a AS peer, us.jaccard | |
| 34 | 34 | FROM user_similarity us |
| 35 | 35 | WHERE us.jaccard > 0.2 |
| 36 | 36 | ) targets |
| 37 | 37 | JOIN likes l ON l.author_did = targets.peer |
| 38 | - WHERE l.article_url NOT IN ( | |
| 39 | - SELECT a.url FROM articles a | |
| 40 | - JOIN subscriptions s ON a.feed_url = s.feed_url AND s.user_did = targets.target | |
| 41 | - LEFT JOIN read_state r ON r.user_did = targets.target AND r.article_id = a.id | |
| 38 | + WHERE NOT EXISTS ( | |
| 39 | + SELECT 1 FROM subscriptions sub WHERE sub.user_did = targets.target AND sub.feed_url = l.feed_url | |
| 42 | 40 | ) |
| 43 | 41 | AND NOT EXISTS ( |
| 44 | 42 | SELECT 1 FROM likes ul WHERE ul.author_did = targets.target AND ul.feed_url = l.feed_url AND ul.article_url = l.article_url |
| @@ -24,21 +24,19 @@ func (e *Engine) ComputeArticleRecommendations(ctx context.Context) error { | |||
| 24 | 24 | ||
| 25 | _, err = tx.ExecContext(ctx, ` | 25 | _, err = tx.ExecContext(ctx, ` |
| 26 | INSERT INTO user_article_recommendations (user_did, feed_url, article_url, score) | 26 | INSERT INTO user_article_recommendations (user_did, feed_url, article_url, score) |
| 27 | - SELECT target, l.feed_url, l.article_url, SUM(us.jaccard) AS score | 27 | + SELECT targets.target, l.feed_url, l.article_url, SUM(targets.jaccard) AS score |
| 28 | FROM ( | 28 | FROM ( |
| 29 | - SELECT us.user_a AS target, s.user_did AS peer | 29 | + SELECT us.user_a AS target, us.user_b AS peer, us.jaccard |
| 30 | FROM user_similarity us | 30 | FROM user_similarity us |
| 31 | WHERE us.jaccard > 0.2 | 31 | WHERE us.jaccard > 0.2 |
| 32 | UNION ALL | 32 | UNION ALL |
| 33 | - SELECT us.user_b AS target, s.user_did AS peer | 33 | + SELECT us.user_b AS target, us.user_a AS peer, us.jaccard |
| 34 | FROM user_similarity us | 34 | FROM user_similarity us |
| 35 | WHERE us.jaccard > 0.2 | 35 | WHERE us.jaccard > 0.2 |
| 36 | ) targets | 36 | ) targets |
| 37 | JOIN likes l ON l.author_did = targets.peer | 37 | JOIN likes l ON l.author_did = targets.peer |
| 38 | - WHERE l.article_url NOT IN ( | 38 | + WHERE NOT EXISTS ( |
| 39 | - SELECT a.url FROM articles a | 39 | + SELECT 1 FROM subscriptions sub WHERE sub.user_did = targets.target AND sub.feed_url = l.feed_url |
| 40 | - JOIN subscriptions s ON a.feed_url = s.feed_url AND s.user_did = targets.target | ||
| 41 | - LEFT JOIN read_state r ON r.user_did = targets.target AND r.article_id = a.id | ||
| 42 | ) | 40 | ) |
| 43 | AND NOT EXISTS ( | 41 | AND NOT EXISTS ( |
| 44 | SELECT 1 FROM likes ul WHERE ul.author_did = targets.target AND ul.feed_url = l.feed_url AND ul.article_url = l.article_url | 42 | SELECT 1 FROM likes ul WHERE ul.author_did = targets.target AND ul.feed_url = l.feed_url AND ul.article_url = l.article_url |
modified
internal/db/db.go +0 -7 | @@ -161,12 +161,5 @@ func migrate(db *sql.DB) error { | ||
| 161 | 161 | } |
| 162 | 162 | } |
| 163 | 163 | |
| 164 | - migrations := []string{ | |
| 165 | - `ALTER TABLE feeds ADD COLUMN favicon_url TEXT`, | |
| 166 | - } | |
| 167 | - for _, m := range migrations { | |
| 168 | - tx.Exec(m) | |
| 169 | - } | |
| 170 | - | |
| 171 | 164 | return tx.Commit() |
| 172 | 165 | } |
| @@ -161,12 +161,5 @@ func migrate(db *sql.DB) error { | |||
| 161 | } | 161 | } |
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | - migrations := []string{ | ||
| 165 | - `ALTER TABLE feeds ADD COLUMN favicon_url TEXT`, | ||
| 166 | - } | ||
| 167 | - for _, m := range migrations { | ||
| 168 | - tx.Exec(m) | ||
| 169 | - } | ||
| 170 | - | ||
| 171 | return tx.Commit() | 164 | return tx.Commit() |
| 172 | } | 165 | } |