历史股票价格等时间序列数据通常存储在RDBMS中。
我正在评估使用此数据的各种选项,可能将其存储在MarkLogic的文档存储或三重存储中,并在此数据和/或与存储在文档/三重存储中的其他类型的数据一起构建一些用例。
本质上,我正在寻找方法
- 在MarkLogic数据库中存储时间序列数据,如历史股票价格。查询该数据(存储在ML中或在RDBMS中查询)的方法,例如通过XQuery。
- 查询此数据的方法,以及存储在doc/triple store中的其他数据。
如果有任何建议,我将非常感谢。
添加更多信息…
我正试图找到一种简洁的方法来捕获这些数据作为三元组。我们的想法是,将这些数据与其他相关数据链接起来会很好。例如,如果我们试图存储在纽约证券交易所上市的汇丰银行的历史股票价格,那么我们可以以某种方式为汇丰银行和纽约证券交易所定义资源,并捕获股票价格作为字面量(也许),然后将汇丰资源与存储在dbpedia中的公司信息链接起来。
本质上,我谈论的是创建链接数据,这样可以很容易地查询从不同来源获取的数据,如果可能的话,尝试使用推理。例如,如果我使用这种方法,我就可以运行这样的查询:"获取总部位于伦敦、营业额超过10亿美元的公司的股票价格"。
你有两个选择。要么每个系列有一个大文档,要么每个价格有一个文档。不建议使用前者,因为后者可以让您更好地使用索引系统,尤其是时间戳上的范围索引。
我使用MarkLogic开发了一个系统,它本质上是一个存储时间序列的系统。我们在该系列中每个点使用一个文档(以及该系列本身的一个文档,用于其"元数据",即该系列中所有点的所有公共信息)。我们还将与一个系列相关的所有文档放在一个集合中。我们为文档uri使用了基于时间戳和每个系列的唯一ID的命名方案,因此我们可以轻松地保证文档uri的唯一性。
重要的一点是让系列点文档引用它们的系列文档(要么显式地引用,要么只是在同一个集合中引用),而不是反过来。
对于每个查询,它取决于您的特定用例,但通常您将在集合上使用搜索约束来标识一个(或几个)序列,并在时间戳上使用范围索引来选择序列中的点的"切片"。如果你有这样的用例,比如根据它们的值(而不是时间)选择点,你可以通过在值本身上使用范围索引,像基于时间戳一样有效。
我建议将时间序列数据存储在时间序列数据库中:https://en.wikipedia.org/wiki/Time_series_database
更新1 :
您可以将HSBC定义为一个实体,为该实体指定元数据,如位置或员工数量,然后将季度收入和交易价格存储为单独的时间序列。然后你可以运行这样的查询:a)通过元数据标签(如Location)过滤,通过聚合(如MAX(price))过滤。实际上,我也会将员工数量存储为系列。这样我就可以调查不同系列之间的相关性,用于研究和分析。