モデル
私のアプリケーションの現在のモデルでは、イベントはいくつかの組み合わせ不可能な頻度で発生する可能性があり、その値は次のように列挙されます:ONCE、DAILY、WEEKLY、MONTHLY、YEARLY、およびその(つまり、イベントの発生)は特定の日付で開始され、オプションで、後の方で終了します(終了していない場合、値はNULLです)。
たとえば、イベント:
- 毎年および毎週発生します
- どちらの場合もちょうどn週間前に始まりました
- 終了日がnullの場合
もっている:
- 今毎週の出来事
- (52-n%52)週間の年間発生
利用方法
このデータは、バックオフィスを介して非常に頻繁に更新できます。1時間のスロットごとに収集された、すべてのイベント発生の3日間の時刻表を表示するには、公開ページに必要です。
タイムテーブルのデフォルトの開始は、今日の深夜の日付です。タイムテーブルの開始は、現在の日付の1か月前と2か月後まで下げることができます。
必要なもの
すべてのイベントデータは、バックオフィスを介して問題なく挿入されます。トリッキーな部分は、タイムテーブルの方法で整理された、それらをフェッチする必要があるときに発生します。私は野蛮なアプローチを試みました(すべてのイベントを選択し、発生を自分で複製します)が、ちょっと失敗しました(これにより、データが変更されるたびに、毎日複製されるイベントの大きなキャッシュが更新されるという問題が発生します!)。
私のこの美しいモデルに本当に欲しいのは(愚かな私:書き込みクエリと読み取りクエリの両方を同時に考えていなかった)、beginning_dateとend_dateの間のすべてのイベントを1時間のスロットで整理することです。
何を指示してるんですか ?
- モデルを非正規化し、「マスター」モデルを再編成されたモデルに自動的に同期するツールを見つけますか?次に、最初に非正規化するにはどうすればよいですか?同期するにはどうすればよいですか?
- 指定された間隔(+ 1時間のスロットでインデックスを作成するための後処理)の間に複製されたすべてのイベントの発生をフェッチできるJPQL(またはHQL、または生のSQL)クエリを見つけますか?あなたが私にそれを提供することができれば私は非常に嬉しいです:-)
- 他に何かありますか?
ちなみに、モデルはオープンなので、問題に対処するためにモデルを変更することができます。ここではすべてが議論の余地があります。
よろしくお願いします、
ロルフ
PS:現在の(の興味深い部分)モデルは次のようになります:
mysql> describe occurrences;
+----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| start_date | datetime | NO | | NULL | |
| end_date | datetime | YES | | NULL | |
| frequency_type | varchar(50) | NO | MUL | NULL | |
| event_id | bigint(20) | NO | MUL | NULL | |
+----------------+-------------+------+-----+---------+----------------+
mysql> describe frequency_types;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| value | varchar(50) | NO | PRI | NULL | |
+-------+-------------+------+-----+---------+-------+