Проблема
У меня есть служба покупок, которую пользователи могут использовать для покупки / аренды цифровых активов, таких как игры, мультимедиа, фильмы ... Когда произошло событие покупки, я создаю задание и планирую его запуск по истечению установленного срока. дата удаления ключа для такого актива.
Все работает. Но было бы лучше, если бы я мог сгруппировать те задания, которые будут выполняться при одном и том же сканировании базы данных, в одно пакетное задание для удаления нескольких ключей.
Это уменьшит значительное количество операций чтения / записи / удаления БД в ключах и в повестке дня. Кроме того, он в большинстве случаев увеличивает объем свободной памяти, поскольку вместо хранения более 100 заданий для сканирования он сохраняет только 1 задание для удаления более 100 ключей.
Исследования
Самая близкая особенность, которую я нашел в Повестке дня Повестки дня, уникальна (). Что позволяет пользователю найти и изменить существующее задание, соответствующее полям, определенным в unique (). Если это может привести новые задания в соответствие с существующим заданием, это решит мое дело.
Реализация
Прежде чем погрузиться и изменить пакет, я хочу проверить, есть ли уже люди, решившие проблему, которую я есть и есть какие-то мысли, которыми можно поделиться.
Другое решение, не затрагивающее пакет, - создать словарь в памяти, чтобы накапливать задания для указанного c дБ сканирования с помощью этой стратегии:
dict = {}
//if key expires in 1597202228 then put to dict slot:
dict = {
1597300000: [jobA]
}
//another key expires in 1597202238 then put to the same slot:
dict = {
1597300000: [jobA,jobB]
}
//the latch condition to put job batch into agenda:
if dict_size == dict_allocated_memory then put the whole dict into db.
if a batch_size = batch_limit then put the batch into db and remove the batch in dict.
if the batch is going to expire in the next db scan then put the batch (it may be empty, has a few jobs...) into db and remove the batch in dict.