获取周期性事件:CQRS还是复杂查询?

时间:2012-10-23 22:40:08

标签: java hibernate jpa recurrence timetable

模型

在我的应用程序的当前模型中,事件可以在几个不可组合的频率上发生,其值的枚举如下:ONCE,DAILY,WEEKLY,MONTHLY,每年,那个(即事件发生)从特定日期开始,可选结束于晚一个(当它们没有结束时,它们的值为NULL)。

例如,一个事件:

  • 每年和每周发生
  • 在两周前完全 n 开始
  • 且其结束日期为空

有:

  • 现在每周发生一次
  • 每年(52 - n%52)周发生

USAGE

此数据可以经常通过后台更新。我们的公共页面需要它才能显示所有事件发生的3天时间表,按1小时的时间段收集。

时间表的默认开始时间是今天午夜的日期。 时间表的开始时间可以缩短到当前日期之前的1个月和之后的2个月。

我需要什么

通过后台插入所有事件数据而没有任何问题。 当我需要以时间表方式组织它们时,棘手的部分就出现了。我尝试了一种粗暴的方法(选择所有事件,并自己复制事件),但我有点失败(这引发了每当数据发生变化时每天更新复制事件的大缓存的问题!)。

我真正希望从我这个漂亮的模型(愚蠢的我:我没有想到同时写入和读取查询)是在begin_date和end_date之间发生所有事件,由1-组织小时槽。

你有什么建议?

  1. 对我的模型进行反规范化并找到一个自动将我的“主”模型同步到重组模型的工具?然后,我该如何首先非规范化呢?我该如何同步?
  2. 查找一个JPQL(或HQL或原始SQL)查询,该查询可以在提供的时间间隔内获取事件的所有复制事件(+可能是一些后处理以按1小时的时间段索引它们)?如果你能提供给我,我会非常高兴: - )
  3. 别的什么?
  4. 顺便说一下,模型是开放的,因此可以更改它以便更好地解决问题。一切都在这里讨论。

    致以最诚挚的问候,

    罗尔夫

    P.S。:当前(有趣的部分)模型看起来像:

    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    |       |
    +-------+-------------+------+-----+---------+-------+
    

1 个答案:

答案 0 :(得分:1)

您可以查询所有发生的事件,这些事件的开始位于请求的结束之前,结尾为空或者在请求的开始之后,然后从结果集中复制/计算所有事件。