在 ArangoDB 中构建时间序列数据
Structuring time-series data in ArangoDB
我有一些时间序列数据(大约每天 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
,以便有效地为每个 dataAttr
的特定配置文件创建时间序列结果集最近 10-20 场比赛。
在调查 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
上放置哈希索引,在事件上放置跳表(它们将通过字符串排序按顺序排列)。
我假设向下遍历到 event1
的 data1
,返回到 profile
,然后向下遍历 event2
data1
等等效率会很低。
如果性能很重要,那么尝试使用索引尽可能多地处理是最重要的。如果路径长度未知(这不是您的用例),遍历会更好。
我建议对存储在数据节点中的数据进行反规范化。您想要 return 属于 profile
和给定 dataAttr
的所有数据节点按时间戳 timeStamp
排序,对吧?在这种情况下,我至少会将配置文件标识符添加到数据节点,并在 profileId
、dataAttr
和 timeStamp
.
上使用跳过列表索引
我有一些时间序列数据(大约每天 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
,以便有效地为每个 dataAttr
的特定配置文件创建时间序列结果集最近 10-20 场比赛。
在调查 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
上放置哈希索引,在事件上放置跳表(它们将通过字符串排序按顺序排列)。
我假设向下遍历到 event1
的 data1
,返回到 profile
,然后向下遍历 event2
data1
等等效率会很低。
如果性能很重要,那么尝试使用索引尽可能多地处理是最重要的。如果路径长度未知(这不是您的用例),遍历会更好。
我建议对存储在数据节点中的数据进行反规范化。您想要 return 属于 profile
和给定 dataAttr
的所有数据节点按时间戳 timeStamp
排序,对吧?在这种情况下,我至少会将配置文件标识符添加到数据节点,并在 profileId
、dataAttr
和 timeStamp
.