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