我可以想到几种可能的方法来存储并在 Neo4j 中查询时态数据。查看能够搜索重复事件和任何异常的示例,我可以看到两种可能性:
一个简单的选择是为每次发生的事件创建一个节点。虽然很容易构建一个密码查询来查找一天、某个范围内的所有事件等,但这可能会创建许多不必要的节点。它还可以很容易地更改单个事件的时间、位置等,因为已经有一个包含基本信息的节点。
第二个选项是将重复时间模式存储为事件节点的属性。这将大大减少图中的节点数量。当搜索特定日期或范围内的事件时,所有满足开始/结束日期(加上任何其他)标准的节点都可以返回给客户端。然后归结为迭代结果以提取出时间模式在搜索范围内给出日期的子集,然后将其与任何异常进行比较并根据需要合并(或忽略)结果(这可能在拉动时部分实现作为查询的一部分的初始结果集)。
虽然第二个选项是我目前会选择的选项,但它似乎非常低效,因为它两次处理数据,尽管第二次处理的子集较小。即使是 Neo4j 的插件也可能会导致两次数据传递,但处理将在数据库服务器上完成,而不是在请求客户端上完成。
我想知道是否可以使用 Cypher 或 Neo4j 作为初始查询的一部分进行此处理?