У меня есть куча работников сельдерея, которым нужно получить одну запись (строку) из базы данных.
Он должен быть возвращен только в том случае, если с момента поля «last_used» прошло 60 секунд, и как только он будет возвращен, он должен обновить «last_used» с текущим временем (поэтому другие рабочие процессы, которые имеют неограниченное количество повторных попыток с задержкой 0, не получают тот же самый)
Возможно ли сделать все это на уровне db? У меня не было бы другого источника, обновляющего это поле «last_used».
Вот как выглядит один ряд.
{"id": "..." "last_used": "2016-06-31 00:37:21.241833", "item": "string"}
Я попытался:
conn = r.connect(host='localhost', port=28015)
do = r.db('database').table('tb').order_by(index=("last_used")).limit(1).update(
{'last_used': r.now()}
, return_changes=True).run(conn)
И это не работает, несколько рабочих возвращают одну и ту же строку до ее изменения.