Зацикливание / экспресс-маркировка элементов для удаления после определенного периода времени - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть модель Item, в которой хранятся предметы пользователя.Эта модель имеет поле endDate, в котором экземпляры необходимо пометить для удаления, установив для поля expired значение true.Есть ли какой-нибудь способ, которым я могу сделать это в loopback / express автоматически?Я использую postgresql в качестве базы данных.

Я могу придумать следующие 2 способа, но я не думаю, что они являются лучшими решениями для этой проблемы:

1) Используя setTimeout, я могу вызвать функцию, которая пометит элементыдля удаления.Это решение совсем не масштабируемо, так как оно не stateless, и если запущено несколько экземпляров node, это может вызвать проблемы.

2) Использовать базу данных redis и для каждого элемента создатьвведите redis со временем истечения.redis автоматически вызовет функцию, когда истечет таймер, и тогда я смогу удалить элемент.Это, я думаю, масштабируемо, так как это stateless.

Есть ли более эффективное решение для этого?

Редактировать

Я хочу уведомитьпользователь также, как только срок действия истекает.Итак, мне нужно, чтобы вызов функции происходил, как только истекает срок действия.Таким образом, установка ключа expireAt и запуск утилиты очистки через определенные промежутки времени здесь не сильно помогут.

1 Ответ

0 голосов
/ 28 сентября 2019

setTimeout масштабируется при условии масштабируемости / производительности совет .Проблема здесь в том, что setTimeout подход недолговечен, например, функциональность будет нарушена для некоторых пользователей, если сервер / контейнер, на котором размещается Express, перезагружается.Другая проблема заключается в том, что он не будет работать, если у вас есть несколько экземпляров Express.

Если есть один экземпляр Express, использующий Redis, не изменит ни масштабируемость, ни долговечность, если вы не включите постоянство Redis для выживания, перезапуски / перезагрузки или если вы неиспользовать более одного узла Redis.

Если есть несколько экземпляров Express, используйте Redis.

...