OrientDB 时间搜索查询

OrientDB Time Search Query

OrientDB I have setup a time series using this use case。但是,我没有将我的顶点作为嵌入列表附加到相应的小时,而是选择只创建从小时到时间相关顶点的边。

为了争论起见,假设每个小时最多有 60 次 Vertex,每次都由时间戳标识。这意味着我可以执行以下查询以获得特定的所需顶点:

SELECT FROM ( SELECT expand( month[5].day[12].hour[0].out() ) FROM Year WHERE year = 2015) WHERE timestamp = 1434146922

这个问题的第一部分是是否有 advantages/disadvantages 将时间戳存储为顶点的 属性(如上查询)与将其存储为边(或边属性)。在这种情况下,我认为查询将是:

SELECT expand( month[5].day[12].hour[0].out('1434146922') ) FROM Year WHERE year = 2015

虽然这看起来更优雅,但我有两个问题;创建新边缘类型的开销。如果您实际上不知道确切的时间戳,则具有灵活性。

问题的第二部分涉及这样一个事实,即一旦我根据时间隔离了单个 Vertex,这只是 Vertex 的层次树的头部。

我当然可以从上面的查询中获取 @rid 然后构造一个新的查询,但我想知道我如何调整上面的查询以将其全部完成。例如,假设在所有层次顶点中都有一个名为 activeboolean 属性。我怎样才能得到所有 true 的顶点?

回答你问题的第一部分:

如用例文档中所述:

如果您需要比小时更细的粒度,您可以继续直到您需要的时间单位:

Hour -> minute (map) -> Minute -> second (map) -> Second

通过向树添加更多精度而不是存储小时时间的时间戳,您可以获得更大的灵活性。

为树添加更多精度的唯一优势是能够以更有效的方式按更小的时间单位进行分组。如果您不需要按比一小时更小的单位进行分组,则无需增加精度。

时间戳应该存储在顶点属性中,因为过滤会简单高效。查看此博主,了解遍历时过滤顶点 属性 的最佳方法: Improved SQL filtering

回答你问题的第二部分:

获取特定的顶点,然后在顶点的层次树上进行查询:

<your-hierachical-tree-query> from (select out('edge')[property = "value"] from
(select expand(month[1].day[1].hour[1].min[1]) from Year where year = 2015))