MarkLogic 中的时间序列数据表示

Time series data representation in MarkLogic

历史股票价格等时间序列数据通常存储在 RDBMS 中。

我正在评估使用此数据的各种选项,可能将其存储在 MarkLogic 中的文档存储或三重存储中,并基于此数据构建一些用例 and/or 以及存储在doc/triple商店。

基本上,我正在寻找方法

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

如果有任何这方面的建议,我将不胜感激。


添加了更多信息...

我正在尝试找到一种将这些数据捕获为三元组的巧妙方法。这个想法是 link 此数据与其他相关数据会很好。例如,如果我们要存储的历史股票价格是汇丰银行在纽约证券交易所上市的,那么我们可以通过某种方式为汇丰银行和纽约证券交易所定义资源,并将股票价格捕获为文字(可能),然后 link资源 HSBC,例如,公司信息存储在 dbpedia.

本质上,我说的是创建 linked 数据,这样就可以轻松查询从不同来源获取的数据,并且如果可能的话,尝试使用推理。例如,如果我使用这种方法,我就可以 运行 查询 'Get me the stock price of the companies headquartered in London, whose turnover is greater than billion'.

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

更新 1:

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

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

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

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

根据查询,这取决于您的具体用例,但通常您会在集合上使用搜索约束来标识一个(或多个)系列,并在时间戳上使用范围索引 select系列中的 "slice" 个点。如果你有像 selecting points based on their value (instead of their time) 这样的用例,你可以通过在值本身上使用范围索引来像基于时间戳一样高效地完成它。