Open bushig opened 7 years ago
Ты по-прежнему планируешь sqlite использовать? Если да, то предлагаю в мастере использовать MySQL, а для дебага - sqlite, чтоб не было проблем с клонированием. Можно также Postgres, на него вроде асинхронный драйвер есть.
В продакшене планирую использовать Postgres. Под него много асинхронных модулей, но не думаю что сейчас вообще есть смысл их использовать, так как предполагается что все запросы будут кэшироваться. Нужно смотреть как приложение будет работать под нагрузкой и там уже решать что нужно оптимизировать.
Ок. А как кстати идея разнести апи для каждой вебмки? В роутах /search/{webm_id} для GET И /check для POST? Как я понял, воркфлоу такой: 1) При загрузке треда, сканируем все вебмки и для каждой отсылаем POST на /check с md5 (id div'a) и и url на его загрузку). 2) В POST'e забиваем всё в Redis, откуда Celery качает, анализирует и запихивает в БД, а затем очищает Redis. 3) На GET /check читаем статус всех вебмок (если таковые в очереди, например) и загружаем из БД те, которые проанализированы. 4) Отсылаем на фронт.
Всё правильно? Я предлагаю сделать так: 1) Собираем id и url всех вебмок, отсылаем GET для каждого id на /search/{webm_id} и /comments/{webm_id} (/likes/{webm_id}) 2) Для всех, кто вернул 404 - отсылаем POST на /check 3) Такой же воркфлоу 4) Записываем в Redis комментарии, лайки, статус скримера на ключ webm (чтобы не создавать сессию и запрос) 5) Далем SetTimeout на /search/{webm_id}, чтобы подтянуть информацию для только что проанализированных вебмок.
Да, я позже планирую вынести анализ одной вебм на GET /check/{webm_md5}?url={url} либо POST /check/{webm_md5} вместо текущего /check?md5={webm_md5}&url={url}, чтобы потом можно было сделать эндпоинты вроде /check/{md5}/comments. Воркфоу такой: 1) В треде собирается информация о всех вебм, формирует json с этими данными и отравляется одним запросом на POST /check. 2) Для каждой вебм в запросе пытаемся получить данные из редиса(тут он работает как кеш, а не как брокер Celery), если там нет данных, то пытаемся взять данные из бд. если их и там нет, то добавляем вебм на обработку в Celery, ставим в редисе для этой вебм сообщение 'delayed' чтобы одинаковые вебм не анализировались повторно. 3) Возвращаем один ответ с информацией по каждой вебм. Если для этой вебм была информация, то подкрашиваем div в нужный цвет, а если было сообщение вроде "Добавлено в очередь на анализ" или "Уже анализируется", то навешиваем на эту вебм событие mouseenter с выполением GET запроса /check/?md5={md5}&url={url} для получения данных и так пока не появятся данные на сервере.
В Redis планирую хранить объекты вида md5:{likes_count, dislikes_count, screamer_chance, views_count, time_created, comments_count}, а список комментариев получать по запросу, если пользователь нажмет кнопку "Загрузить комментарии".
Create DB representation of comments, make api endpoints to fetch comments and add new ones. Comments should be used to share SOURCE of video or some cool story. Comments should be ordered by likes.