#database #django #queue
#База данных #django #очередь
Вопрос:
Предположим, у меня в базе данных 100 записей, и я хочу применять метод к 5 записям каждую минуту. Можно ли обрабатывать базу данных как очередь, чтобы после того, как первые 5 записей применят метод, они будут помещены в нижнюю часть базы данных, а второй квинтет будет помещен в первый квинтет и так далее?
Ответ №1:
Я думаю, вы ищете фоновую очередь процессора / задач, такую как Celery.
По сути, вы бы настроили задачу, которая будет выполняться каждые 5 минут. Затем в этой задаче вы должны извлечь 5 записей, которые хотите отредактировать. Хороший способ сделать это — иметь datetime в модели, которая обновляется при каждом сохранении с использованием auto_now
параметра for DateTimeField
.
Комментарии:
1. Это было именно то, что я искал. Но я не понимаю одного: если я использую
DateTimeField
предложенный вами метод, не придется ли мне сканировать всю базу данных каждые 5 минут, чтобы найти записи с наибольшей разницей междуCurrentTime
ними и ихDateTimeField
?2. Вы можете поместить в нее индекс и получить самую старую дату. Таким образом, это не сравнение, и данные должны быть доступны довольно рано при поиске, нет? Редактировать: в вашем первоначальном вопросе вы сказали, что у вас будет только 100 элементов. Это не вызовет никаких проблем с производительностью. Я предполагаю, что фактическое приложение немного больше.