Size: a a a

Обсуждения техдирские

2018 April 24

IC

Ilya Chesnokov in Обсуждения техдирские
Ок, очередь с отсрочкой исполнения. А как ты будешь хранить там данные?
источник

DS

Dmitry Simonov in Обсуждения техдирские
В очереди хранить серию событий. А всё остальное в обычной модели - причём какой угодно.
источник

IC

Ilya Chesnokov in Обсуждения техдирские
Ruslan
Key value по ключу id юзера + id обьекта с хранением времени
Иногда юзер - это единственный объект. Например, "выздоровление в больнице" или "отсидка в тюрьме" - это тоже таймауты.
источник

DS

Dmitry Simonov in Обсуждения техдирские
Селери же может работать с любыми бд, но предпочитительнее те, который поддерживают паб/саб. Обычно подключают редис.
источник

DS

Dmitry Simonov in Обсуждения техдирские
Кстати, первый. кто прикрутит к селери тарантул получит звание первого извращенца в мире :)
источник

IC

Ilya Chesnokov in Обсуждения техдирские
Т.е. селери цепляется к любой БД? А что в БД должно быть? Вот есть там юзер. Нам надо сказать "он выздоровеет через 10 минут". Что для этого надо в БД сохранить?
источник

IC

Ilya Chesnokov in Обсуждения техдирские
Решение с key-value я тоже рассматривал.
источник

DS

Dmitry Simonov in Обсуждения техдирские
источник

IC

Ilya Chesnokov in Обсуждения техдирские
Туда надо добавить "тип таймаута" - т.е. "выздоровление", "заправка корабля" и т.д.
источник

IC

Ilya Chesnokov in Обсуждения техдирские
То есть у нас есть поля: "тип таймаута" и "ид объекта", ну и дата/время истечения таймаута. Вопрос в том, куда все это записать, чтобы хранить максимально надежно и с защитой от дурака.
источник

AM

Andrey Murzin in Обсуждения техдирские
Таймаут можно рассматривать, как флаг, наличие которого сигнализирует на запрет какого-либо действия. В БД типа key/value кладем значение с ограниченным временем жизни. Пока оно живо — действие запрещено. При записи значение таймаута берется из пула купленных (или умолчательных) для пользователя. Ключ - юзер, значение - тип таймаута
источник

IC

Ilya Chesnokov in Обсуждения техдирские
Andrey Murzin
Таймаут можно рассматривать, как флаг, наличие которого сигнализирует на запрет какого-либо действия. В БД типа key/value кладем значение с ограниченным временем жизни. Пока оно живо — действие запрещено. При записи значение таймаута берется из пула купленных (или умолчательных) для пользователя. Ключ - юзер, значение - тип таймаута
Отлично, вспомнили про экспирацию 😊
источник

IC

Ilya Chesnokov in Обсуждения техдирские
Но это неправильный ответ. Повторяю: должна быть защита от криворукого программиста.
источник

IC

Ilya Chesnokov in Обсуждения техдирские
(хотя именно так я и хотел сначала сделать)
источник

IC

Ilya Chesnokov in Обсуждения техдирские
Окончательное решение получилось извращенское, кстати))
источник

IC

Ilya Chesnokov in Обсуждения техдирские
Но с доп. уровнем защиты.
источник

IC

Ilya Chesnokov in Обсуждения техдирские
Так что не стесняйтесь предлагать самые странные идеи)
источник

IC

Ilya Chesnokov in Обсуждения техдирские
Под защитой от дурака подразумеваю проверку всех сохраненных значений - т.е. мы не можем случайно сохранить undef, значение типа таймаута не из списка или айдишник несуществующего объекта.
источник

IC

Ilya Chesnokov in Обсуждения техдирские
При этом сами данные хранятся в PostgreSQL.
источник

IC

Ilya Chesnokov in Обсуждения техдирские
В-общем, если кому интересно голову поломать, пишите - я чуть позже приду и скажу, к чему мы пришли (или может увижу тот самый ответ, который заставит меня предложить переделку).
источник