Я работаю над этим личным проектом некоторое время, и я ломаю голову над этой одной проблемой.
Каждые 20 минут мой cron берет данные из сообщений в subreddit.Данные включают в себя такие данные, как количество голосов, количество голосов и т. Д. У меня также есть столбец для времени сбора данных, чтобы я мог найти самые актуальные данные для каждого представления.
Текущие данные отображаются навеб-страница для этого представления, и исторические данные для этого представления отображаются в виде диаграмм и графиков на этой странице, поэтому мне нужны оба набора.
Некоторые примеры столбцов для структуры таблицы:
reddit_id | retrieval_time | total_upvotes | upvote_ratio | num_comments
Таблица содержит несколько reddit_ids, каждый со своими индивидуальными данными (total_upvotes, upvote_ratio) в определенный момент времени (retrieval_time).
Мой первоначальный рефлекс - сделать запрос для всех reddit_ids, а затем выполнить итерациюперечислите и выполните запрос для каждого идентификатора, как показано ниже:
SELECT reddit_id FROM nstats;
Затем выполните итерации по результатам запроса и выполните этот запрос для каждого:
SELECT * FROM nstats WHERE reddit_id='9hdajv' ORDER BY retrieval_time DESC;
Этот метод работает довольно медленно, по крайней мере, в моем тестировании.Я использую Postgres с Peewee и Python для доступа к базе данных.
Нужно ли мне реструктурировать способ хранения моих данных?Я спрашиваю правильный путь, и я просто должен иметь дело с медленными скоростями?Как должен выглядеть один запрос, чтобы получить самые последние данные для каждой отправки?
Добавление примера выходных данных для пояснения.Вот как должна выглядеть необработанная таблица: несколько reddit_ids, каждый со своими собственными данными.
reddit_id | retrieval_time | total_upvotes | upvote_ratio | num_comments
9hdajv | 1537471220 | 15 | .78 | 3
9hdajv | 1537298420 | 7 | .98 | 0
9hdajv | 1537384820 | 10 | .86 | 1
7klmnq | 1534706420 | 25 | .86 | 1
7klmnq | 1534965620 | 35 | .75 | 5
3poslo | 1535311220 | 16 | .75 | 3
3poslo | 1535397620 | 20 | .83 | 6
3poslo | 1535570420 | 37 | .85 | 9
Это будет вывод, 1 reddit_id каждый со своими самыми последними данными.
reddit_id | retrieval_time | total_upvotes | upvote_ratio | num_comments
9hdajv | 1537471220 | 15 | .78 | 3
7klmnq | 1534965620 | 35 | .75 | 5
3poslo | 1535570420 | 37 | .85 | 9