[英]OrientDB Time Search Query
在OrientDB中,我已使用此用例设置了时间序列。 但是,我没有将我的顶点作为嵌入列表附加到各个小时,而是选择仅创建一个从小时到与时间相关的顶点的边。
为了争辩,可以说每个小时最多包含60个时间Vertex
每个时间Vertex
都由时间戳标识。 这意味着我可以执行以下查询以获得特定的所需顶点:
SELECT FROM ( SELECT expand( month[5].day[12].hour[0].out() ) FROM Year WHERE year = 2015) WHERE timestamp = 1434146922
这个问题的第一部分是将时间戳存储为Vertex的属性(如上述查询)与将其存储为边缘(或edge属性)是否有任何优点/缺点。 在这种情况下,我认为查询将是:
SELECT expand( month[5].day[12].hour[0].out('1434146922') ) FROM Year WHERE year = 2015
尽管这看起来更优雅,但我有两个问题。 创建新边缘类型的开销。 灵活性,如果您实际上不知道确切的时间戳。
问题的第二部分涉及以下事实:一旦我根据时间隔离了单个顶点,这仅仅是顶点层次树的头部。
我当然可以从上面的查询中获取@rid
,然后构造一个新查询,但是我想知道如何才能将上面的内容@rid
实现。 例如,假设在所有分层顶点中都有一个称为active
的boolean
属性。 我怎样都可以得到的顶点是true
?
回答问题的第一部分:
就像用例文档中所述:
如果您需要比小时更多的粒度,则可以继续使用直到需要的时间单位:
Hour -> minute (map) -> Minute -> second (map) -> Second
通过为树添加更多精度而不是将时间的时间戳存储在小时中来获得更大的灵活性。
为树添加更高的精度的唯一优势是能够以一种真正有效的方式按较小的时间单位进行分组。 如果您不需要按一个小时来分组较小的单位,则不必增加精度。
时间戳应该存储在vertex属性中,因为过滤将很容易且有效。 查看此博客,了解遍历时对顶点属性进行过滤的最佳方法: 改进的SQL过滤
回答问题的第二部分:
获取特定的顶点,然后在该顶点的层次树上进行查询:
<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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.