排他的なリソースをスケジュールしている複数のユーザーを調整するアプリケーションを実装しようとしています。スケジュール データは、単一のマスター ノードを持つネットワーク上で強力な一貫性を維持する必要があります。スケジュールされたリソースは、会議室から現場の作業員まで、あらゆるものである可能性があります。
会議室で一度に 2 つの会議をスケジュールすることはできず、作業者が同時に 2 つの現場にいることはできないと想定しています。アプリケーションのビジネス ロジックでは、ユーザーがリソースを「オーバーブッキング」することを許可してはなりません。
私が理解できないのは、2 人以上のユーザーが同時にスケジュールに従って操作し、競合が発生した場合、更新の 1 つが中止されるようにデータを表現する方法です。
これまでに見た唯一の解決策は、排他的なリソースごとにタイムスロットを追跡することです。したがって、会議室が 5 分間隔で使用され、午前 9 時から 9 時 30 分に予定されている場合、対応する午前 9 時から 9 時 30 分までの 5 分間の時間枠はすべて TRUE を返し、予定外の時間枠は FALSE または NULL を返します。 . 次に DB トランザクションは、会議室オブジェクトをストアから引き出し、すべてのタイム スロットをチェックし、更新が既存のタイム スロットと競合する場合は中止します。
ただし、これは非常に大きく、非常に速くなるようです。おそらく、ガベージコレクションされる可能性がありますか?また、設計の目標の 1 つは可変粒度をサポートすることです。そのため、一部のオブジェクトは分単位でスケジュールされ、他のオブジェクトは日単位でスケジュールされますが、このデータ設計はそれを十分にサポートしていません。
現在、Python を使用して Google App Engine にこれを実装しようとしていますが、この問題に対するより一般的な解決策を見てみたいと思っています。私がグーグルで思いついたのは、定期的なタスクのスケジューリング、または最適化されたスケジュールを自動的に構築するための 1 回限りの操作を実行するアルゴリズムだけです。