首页 文章

在ArangoDB中构建时间序列数据

提问于
浏览
3

我有一些时间序列数据(大约每天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上放置哈希索引(它们将按字符串排序顺序排序) .

我假设遍历 data1data1 ,回到 profile ,然后退回 event2 data1 等等将是非常低效的 .

1 回答

  • 3

    如果性能至关重要,那么尝试使用索引尽可能多地处理是至关重要的 . 如果您的路径长度未知,则遍历是优越的,这不是您的用例 .

    我建议对存储在数据节点中的数据进行非规范化 . 您想要返回属于 profile 的所有数据节点和按时间戳 timeStamp 排序的给定 dataAttr ,对吗?在这种情况下,我至少会将配置文件标识符添加到数据节点,并使用 profileIddataAttrtimeStamp 上的跳过列表索引 .

相关问题