gpt4 book ai didi

java - 获取重复事件: CQRS or complex query?

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:40 25 4
gpt4 key购买 nike

型号

在我的应用程序的当前模型中,事件可以以几个不可组合的频率发生,其值枚举如下:ONCE、DAILY、WEEKLY、MONTHLY、YEARLY,并且(即事件发生)从某个日期开始,可选在稍后的日期结束(当它们没有结束时,它们的值为 NULL)。

例如,一个事件:

  • 每年和每周发生
  • 在这两种情况下都恰好n周前开始
  • 其结束日期为空

有:

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

使用

这些数据可以通过后台非常频繁地更新。我们的公共(public)页面需要它才能显示所有事件发生的 3 天时间表(按 1 小时时段收集)。

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

我需要什么

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

我真正想要从我的这个漂亮的模型中得到的东西(愚蠢的我:我没有同时想到写入和读取查询)是让在 begin_date 和 end_date 之间发生的所有事件按 1 小时时段组织。

你有什么建议?

  1. 对我的模型进行非规范化并找到一个工具来自动将我的“主”模型同步到重新组织的模型?那么,我如何首先将其非规范化呢?如何同步?
  2. 找到一个 JPQL(或 HQL,或原始 SQL)查询,该查询可以在提供的时间间隔内获取所有重复发生的事件(+也许进行一些后处理以按 1 小时时段对它们进行索引)?如果您能提供给我,我会非常高兴:-)
  3. 还有别的事吗?

顺便说一下,该模型是开放的,因此可以对其进行更改以更好地解决问题。一切都可以在这里讨论。

最诚挚的问候,

罗尔夫

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

最佳答案

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

关于java - 获取重复事件: CQRS or complex query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13040429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com