在OrientDB中,我使用此use case设置了时间序列。但是,我没有将我的Vertex作为嵌入列表附加到相应的小时,而是选择创建从小时到时间相关的Vertex的边缘。
为了论证,可以说每小时最多有60个时间SELECT FROM ( SELECT expand( month[5].day[12].hour[0].out() ) FROM Year WHERE year = 2015) WHERE timestamp = 1434146922
,每个时间由一个时间戳标识。这意味着我可以执行以下查询以获取特定的所需顶点:
SELECT expand( month[5].day[12].hour[0].out('1434146922') ) FROM Year WHERE year = 2015
这个问题的第一部分是将时间戳存储为Vertex的属性(如上面的查询)与将其存储为边缘(或边缘属性)是否有任何优点/缺点。在这种情况下,我认为查询将是:
@rid
虽然这看起来更优雅但我有两个顾虑;创建新边缘类型的开销。如果您实际上不知道确切的时间戳,则具有灵活性。
问题的第二部分涉及这样一个事实,即一旦我根据时间隔离了单个顶点,这只是顶点的一个层次结构树的头部。
我当然可以从上面的查询中获取boolean
,然后构建一个新的查询,但我想知道如何调整上述内容来完成所有这一切。例如,假设在所有分层顶点中都有一个名为active
的{{1}}属性。如何获得true
的所有顶点?
答案 0 :(得分:2)
回答问题的第一部分:
如用例文档中所述:
如果您需要比小时更多的粒度,您可以继续直到您需要的时间单位:
Hour -> minute (map) -> Minute -> second (map) -> Second
通过向树添加更多精度而不是在一小时内存储时间的时间戳,可以获得更大的灵活性。
为树添加更多精度的唯一优势是能够以非常有效的方式按较小的时间单位进行分组。如果你不需要按小一个单位分组,那么一小时,那么你就不必增加更多的精确度。
时间戳应存储在顶点属性中,因为过滤将变得简单而有效。查看此博客,了解在遍历时过滤顶点属性的最佳方法: Improved SQL filtering
回答问题的第二部分:
获取特定顶点,然后在顶点的hiearachical树上进行查询:
<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))