Я пытаюсь реализовать приложение, которое координирует работу нескольких пользователей, планирующих использование эксклюзивных ресурсов. Данные расписания должны поддерживать строгую согласованность в сети с одним главным узлом. Запланированные ресурсы могут быть чем угодно, от конференц-зала до работника на рабочем месте.
Мы предполагаем, что конференц-зал не может быть запланирован для двух совещаний одновременно, а работник не может находиться на двух рабочих местах одновременно. Бизнес-логика приложения не должна позволять пользователю «перезаказывать» ресурс.
Чего я не могу понять, так это того, как представить данные, чтобы, если два или более пользователей работали по расписанию одновременно и возникали конфликты, одно из обновлений прервалось.
Единственное решение, которое я видел до сих пор, — это отслеживать временные интервалы для каждого исключающего ресурса. Таким образом, если конференц-зал используется с 5-минутными интервалами, и он был запланирован на 9–9:30, то все соответствующие 5-минутные временные интервалы для 9–9:30 вернут TRUE, а незапланированные интервалы вернут FALSE или NULL. . Затем транзакция БД извлекает объект конференц-зала из хранилища, проверяет все временные интервалы и прерывается, если обновление конфликтует с существующими временными интервалами.
Тем не менее, похоже, что он станет очень большим, очень быстрым. Может быть, это сборщик мусора? Кроме того, одной из целей дизайна является поддержка переменной степени детализации, поэтому некоторые объекты будут планироваться ежеминутно, в то время как другие могут выполняться ежедневно, и этот дизайн данных не очень хорошо поддерживает это.
В настоящее время я пытаюсь реализовать это в Google App Engine с помощью Python, но мне было бы очень интересно увидеть некоторые более общие решения этой проблемы. Все, что я придумал с помощью Google, — это планирование повторяющихся задач или алгоритмов, которые выполняют однократные операции для автоматического построения оптимизированных расписаний.