2016-06-23 8 views
0

MongodBでは交差の方法が見つかりましたが、日付範囲の除外も実装したいと考えています。私に説明させてください。時間範囲とのMongodbの交差

各サポートチームの毎日の回転数を取得しています。各サポートチームは、15分ごとに5〜25分間(約)予約することができます。各チームには2〜10人の人がいます。指定されたチームの次の利用可能なタイムスロットを表示する必要があります。例えば

:月曜日の

初期の空きスロット(チームの誰もが空くです)

08:00, 08:15, 08:30, 08:45, 09:00... 

まずチケットは(2のうち)1人に割り当てられますが、このチケットはに予定されています08:15とすると、完了するのに35 minutesになります。だから、空きスロットはまったく同じになります。

08:00, 08:15, 08:30, 08:45, 09:00... 
    (08:15-08:50 1/2 busy) 

第二に、チケットが到着すると08:30に予定されており、完了までに1時間かかります。だから、空きスロットは次のようになります。

08:00, 08:15,09:00... 
(08:15-08:50 1st of 2 busy) 
(08:30-09:30 2nd of 2 busy) 

我々は今、私たちは二人が08:30でその次のジョブをやって起動しますと、15分の最大のために利用可能であることを08:15のチケットをnallow CAことを十分に承知しているが、最初に時間を除外し、適切な交差点を見つけることに焦点を当てて、定期的なチケットを基本にしたいと思っています。

また、MongoDBではなくredisを使用していますが、これは単なる別のアイデアです。

+1

は、mysqlタグを削除しました。言及されているものとは無関係です。 – Drew

答えて

1

あなたはこのユースケースのためにRedisのセットを使用することができます。

タイムスロットは、あなたがこのように行うことができ、15分の倍数に常にある場合:

1)すべての時間を含む普遍セットを持っていますスロット。ここでチームの各メンバーの15

sadd universal 08:00 08:15 08:30 08:45 09:00 ... 

2の倍数)が彼らのために予約されたスロットの別個のセットを有します。メンバー1 08:15-08:50あなたは彼に09:00まで従事させる必要があります。

sadd member_1 08:15 08:30 08:45 09:00 

3)同様に他のメンバーも同様です。 member2 08:30〜09:30

sadd member_2 08:30 08:45 09:00 09:30 

4)今、各メンバーのためにあなたは、無料の全体的なスロットの

sdiff universal member_1 

5を使用して空きスロット)を取得することができます。 2つの操作を行う必要があります。

result = sinter member_1 member_2 ... 
sdiff universal result 

すべてのメンバーのセットを横断すると、すべてのユーザーがビジー状態のタイムスロットが得られます。だからあなたはそれらのスロットを割り当てることはできません。

ユニバーサルセットで減算(差分)操作を行うと、自由に使用できるスロット全体が得られます。

これが役に立ちます。

+0

電子メールでチャットできますか? –

+0

https://chat.stackexchange.comでも同じことができます。 –

+0

https://chat.stackexchange.com/rooms/41565/redis-intersection –