我有一些时间序列数据(大约每天1-5点)我需要能够使用ArangoDB在webapp中快速访问。数据与特定配置文件相关联,但一个集合用于所有配置文件的所有数据。在配置文件节点和数据节点之间,有一个报告节点和一个事件节点。该报告只是来自给定事件的一组数据点。现有的图形结构如下所示:
profile =====> event1 ========> reportA =======> data1
\ \ \=======> data2
\ \
\ \========> reportB =======> data3
\ \=======> data4
\
\==> event2 ========> reportA =======> data1
\ \=======> data2
\
\========> reportB =======> data3
\=======> data4
我希望通过相关事件按顺序有效地呈现data1
的图表,按事件的属性排序。我希望结果集的类似表格结构如下所示:
event dataAttr value
-------------------------------
event1 data1 42
event2 data1 6
event3 data1 7
event4 data1 343
我可能会针对给定报告中的每个dataAttr
运行此查询,以便为最后10-20个事件的特定配置文件中的每个dataAttr
有效创建时间序列结果集。
在Neo4J中调查此问题时,他们建议直接将顺序事件相互连接。我想知道这是否也是ArangoDB中更好的方法。
这意味着要创建一个类似于此的附加图形:
data1 (of event1) => data1 (of event2) => data1 (of event3) => data1 (of event4)
data2 (of event1) => data2 (of event2) => data2 (of event3) => data2 (of event4)
等
每个dataAttr
在前一个事件中与其表兄相连,因此在遍历第一个图中的最新事件后,第二个图将用于遍历n层到过去的事件(实际上是10- 20)。
这可能是为这样的查询构建数据的最佳方法吗?性能将至关重要,因为我可能会在页面上加载20个图表,每个图表都由此查询提供。
使用索引而不是通过图遍历查询文档集时,此查询会更快吗?文档集合结构可以在事件的dataAttr
和skiplist上放置哈希索引(它们将按字符串排序顺序排序)。
我假设遍历data1
event1
,后退至profile
,然后退回event2
data1
,依此类推非常低效。
答案 0 :(得分:3)
如果性能至关重要,那么尝试尽可能多地使用索引来处理是至关重要的。如果你有一个未知的路径长度,那么遍历是优越的,这不是你的用例。
我建议对存储在数据节点中的数据进行非规范化。您希望返回属于profile
和给定dataAttr
的所有数据节点,按时间戳timeStamp
排序,对吗?在这种情况下,我至少会将配置文件标识符添加到数据节点,并在profileId
,dataAttr
和timeStamp
上使用跳过列表的索引。