Моделирование доступности ресурсов с течением времени с исключениями в Rails

Я борюсь с тем, как смоделировать ресурс и его доступность, используя инструменты, драгоценные камни или плагины, доступные нам в Rails.

Обычно каждый ресурс будет иметь типичную доступность 0..24 часа на каждый день (0,1,2,3,4,5,6) недели. НО тогда будут исключения, которые необходимо учитывать, например, праздник или особое событие, которые должны иметь преимущественную силу по умолчанию для этого дня недели.

Я могу думать о двух широких подходах (хотя я уверен, что их больше). Тот, который будет запрашивать БД по каждому запросу и проверять логику, чтобы узнать, доступен ли ресурс в данный момент. Это может стать громоздким (отнимающим много времени) по мере роста системы. Другой будет запускать процесс (cron?) Каждые x (5?) Минут, чтобы установить логическое значение (ДОСТУПНО) для каждого производного ресурса в зависимости от правил его доступности.

Это общие подходы, которые, возможно, могут сработать, но как подойти к модели / классам - вот где я действительно мог бы воспользоваться некоторыми советами.

Есть предположения? Опыт? Драгоценные камни / плагины, о которых мне следует знать?


person Meltemi    schedule 22.07.2010    source источник


Ответы (1)


Не уверен, применимо ли оно к вашему приложению, но есть довольно приятный драгоценный камень Ruby под названием ice_cube, который может быть используется для моделирования повторяющихся дат и времени. Вы можете настроить расписание для своих ресурсов, указав их правила доступности и случаи исключения. Расписание можно сериализовать в базе данных как YAML (например, в текстовом поле) для каждого ресурса.

Когда вам нужно узнать, доступен ли конкретный ресурс, вы просто извлекаете его из расписания, десериализуете его и спрашиваете ice_cube, пересекаются ли дата / время с его правилами или нет. Это очень быстро и эффективно.

person bjg    schedule 22.07.2010
comment
Вы, наверное, знаете, как легко / быстро, используя ice_cube, я мог искать среди тысяч записей, чтобы найти те немногие, которые доступны в данный момент? - person Meltemi; 04.12.2010