Size: a a a

Saint P Ruby Community

2021 January 22

w

wi11son in Saint P Ruby Community
Artem Napolskih
Не понимаю вопрос.
Редис, в нем хранятся все счетчики, с экспаиром (значительным), в контроллере лайка +1 в редисе, если данных нет, читаем из бд и пишем начальное значение в редис и добавляем +1 (это для старых видосов, данные по которым удалены из редиса). Периодический джоб / крон / демон, который синкает данные по всем видосам из редиса в бд (для долговременного хранения).

Это если сложно, а если просто, то без дополнительной БД и синхронизации, просто Redis Sentinel (надежный кластер) или другая аналогичная бд.
прям все счетчики видео хранить в редисе?
источник

w

wi11son in Saint P Ruby Community
а как тогда строить лидерборд?
источник

w

wi11son in Saint P Ruby Community
используя SORT?
источник

w

wi11son in Saint P Ruby Community
да и сложность такой штуки O(N), и если мы делаем например анлимитед скрол, подгружая по  15 записей, мы просто будем очень сложно делать эту выборку, каждый раз при прокрутке
источник

AN

Artem Napolskih in Saint P Ruby Community
В редисе есть крутые структуры которые позволят реализовать почти что угодно.
zset и на край lua
источник

w

wi11son in Saint P Ruby Community
надо побенчмаркать
источник

w

wi11son in Saint P Ruby Community
спасибо
источник

SP

Sergey Ponomarev in Saint P Ruby Community
@wi11son Redis Bitmap для хранения фактов, Redis ZSET для лидербордов, lua чтобы связать всё в транзакцию
источник

1

111a in Saint P Ruby Community
https://habr.com/en/company/domclick/blog/538216/

Может уже кидали?
Интересно написано.
источник

AD

Anton Davydov in Saint P Ruby Community
Artem Napolskih
редис + периодическая синхронизация в бд.
сделал бы так же, ну или если лайки нужны прямо с инфой - слал бы в условную кафку и потом батчем обрабатывал и ужимал данные, а текущее количество отдавал бы из редиса (там инкремент атомарый и довольно шустрый)
источник

AD

Anton Davydov in Saint P Ruby Community
Anton Davydov
сделал бы так же, ну или если лайки нужны прямо с инфой - слал бы в условную кафку и потом батчем обрабатывал и ужимал данные, а текущее количество отдавал бы из редиса (там инкремент атомарый и довольно шустрый)
ну и возможно лайки по времени я бы хранил в условном кликхаусе (или аналоге), что бы не заваливать постгрес этим
источник

AD

Anton Davydov in Saint P Ruby Community
wi11son
прям все счетчики видео хранить в редисе?
не, ты же можешь дублировать данные - реалтайм в редисе держать, а дашборды строить с запозданием и хранить данные в другой бд
источник

AD

Anton Davydov in Saint P Ruby Community
вопрос в том, что тебе действительно реалтайм лидерборд нужен?
источник

AR

Anna Razumova in Saint P Ruby Community
ребят, что за формат времени такой? Мне гем representable его выдает, чет хз что с ним делать 2021-01-22T15:36:43.305Z
источник

DE

Dmitry Evgenevich in Saint P Ruby Community
парсить
источник

MS

Mikhail Sytchev in Saint P Ruby Community
кажется ISO 8601
источник

AI

Aleksandr Ivanov in Saint P Ruby Community
Anna Razumova
ребят, что за формат времени такой? Мне гем representable его выдает, чет хз что с ним делать 2021-01-22T15:36:43.305Z
iso8601
источник

MS

Mikhail Sytchev in Saint P Ruby Community
в формате UTC
источник

AR

Anna Razumova in Saint P Ruby Community
🤯
источник

AR

Anna Razumova in Saint P Ruby Community
Спасибо
источник