0

诸如历史股票价格之类的时间序列数据通常存储在 RDBMS 中。

我正在评估使用此数据的各种选项,可能将其存储在 MarkLogic 中的文档存储或三重存储中,并在此数据和/或存储在文档/三重存储中的其他类型的数据上构建一些用例。

本质上,我正在寻找方法

  1. 在 MarkLogic 数据库中存储时间序列数据,例如历史股票价格。
  2. 查询这些数据的方法(存储在 ML 中或通过 RDBMS 查询),例如通过 XQuery。
  3. 查询此数据的方法,以及存储在 doc/triple 存储中的其他数据。

我将不胜感激这方面的任何建议。


添加了更多信息...

我试图想出一种巧妙的方法将这些数据捕获为三元组。这个想法是将这些数据与其他相关数据联系起来会很好。例如,如果我们尝试存储的历史股票价格是针对在 NYSE 上市的 HSBC,那么我们可以以某种方式定义 HSBC 和 NYSE 的资源,并将股票价格捕获为文字(也许),然后将资源 HSBC 与例如,存储在dbpedia中的公司信息。

从本质上讲,我说的是创建链接数据,以便轻松查询从不同来源获取的数据,并且如果可能的话,尝试使用推理。例如,如果我使用这种方法,我可以运行诸如“获取总部位于伦敦的公司的股票价格,其营业额超过 10 亿美元”之类的查询。

4

2 回答 2

2

你有 2 个选择。每个系列有 1 个大文档,或者每个价格有 1 个文档。不推荐使用前者,后者可以让你更好地使用索引系统,尤其是时间戳上的范围索引。

我使用 MarkLogic 开发了一个系统,它本质上是一个存储时间序列的系统。我们在系列中的每个点使用 1 个文档(以及系列本身的 1 个文档,用于其“元数据”,所有信息在系列中的所有点中都是通用的)。我们还将与 1 个系列相关的所有文档放在 1 个集合中。我们使用基于时间戳和每个系列唯一 ID 的文档 URI 命名方案,因此我们可以轻松保证文档 URI 的唯一性。

重要的一点是让系列点文档引用他们的系列文档(显式地或仅仅通过在同一个集合中),而不是相反。

根据查询,这取决于您的特定用例,但通常您将使用集合上的搜索约束来识别一个(或多个)系列,并使用时间戳上的范围索引来选择系列中的点“切片” . 如果您有诸如根据值(而不是时间)选择点的用例,则可以通过在值本身上使用范围索引来像根据时间戳一样有效地执行此操作。

于 2015-08-18T05:50:40.030 回答
0

我建议将时间序列数据存储在时间序列数据库中:https ://en.wikipedia.org/wiki/Time_series_database

更新 1

您可以将 HSBC 定义为实体,为实体指定元数据,例如位置或人数,然后将季度收入和交易价格作为单独的时间序列存储。然后您可以运行查询 a) 按元数据标签(例如位置)过滤并按聚合过滤,例如 MAX(价格)。实际上,我也会将人数存储为系列。通过这种方式,我可以调查不同系列之间的相关性以进行研究和分析。

于 2015-08-17T20:46:54.913 回答