Azure 对时间序列的考虑

Azure 对时间序列的考虑,azure,f#,time-series,resampling,deedle,Azure,F#,Time Series,Resampling,Deedle,我们正在考虑将Azure表存储(ATS)与Deedle(或具有类似功能的其他库)一起用于时间序列存储、操作和计算。据我所知,F#似乎也是对数组进行操作的一个不错的选择 我们的出发点是一组能源消耗的时间序列。该系列可以是一个区间(固定或不规则区间)内的消耗量,也可以是一个计数器(从中我们可以计算从一个读数到下一个读数的消耗量)。由于数据点只是一个标记(用作分区键)、时间戳(rowkey)和值,因此这应该非常适合ATS 从用户的角度来看,他们希望在给定的时间段和分辨率内对序列进行计算,例如,在给定的

我们正在考虑将Azure表存储(ATS)与Deedle(或具有类似功能的其他库)一起用于时间序列存储、操作和计算。据我所知,F#似乎也是对数组进行操作的一个不错的选择

我们的出发点是一组能源消耗的时间序列。该系列可以是一个区间(固定或不规则区间)内的消耗量,也可以是一个计数器(从中我们可以计算从一个读数到下一个读数的消耗量)。由于数据点只是一个标记(用作分区键)、时间戳(rowkey)和值,因此这应该非常适合ATS

从用户的角度来看,他们希望在给定的时间段和分辨率内对序列进行计算,例如,在给定的月份分辨率下,计算第三个序列作为其他两个序列之间的差值

这引起了一些问题:

  • ATS和F#能足够快吗?如果我们有10000个数据点?100.000? 与C#相比
  • 重新采样需要计算序列时间戳之间的点。我没有看到任何关于(线性)插值的Deedle例子,但我假设这只是传递一个函数,可以查看必要的数据点?这对我们的分数足够快吗
  • 计算将由用户决定,我们必须将其作为配置。到目前为止,我最好的猜测是将公式转换成某种格式,我们可以轻松地将其解析为反向波兰符号,并特别注意表示系列的标记(即从ATS读取,重新采样,然后执行操作)
如有任何意见,将不胜感激

F#与C#在性能上可能基本相同,除非在两者之间做一些完全不同的事情(例如,不可变数据集与可变数据集)。在一天结束时,两者都会编译成IL

Azure表存储-确保正确选择分区+行键。有很多关于挑选Azure表存储分区键的文档,特别是在时间序列中-确保将行分组到正确的级别,以确保数据是分布式的,分区不太大或太小。您可能还想看看Azure存储类型提供程序和/或Azure存储F#库,它使使用ATS比标准的.NET SDK更容易


Deedle AFAIK确实有能力跨时间序列替换缺失的值,而且至少有一个名为BigDeedle的项目直接在ATS上工作(尽管我不确定这个项目准备得如何)。

我认为Isaac已经提到了最重要的几点,但由于这个问题涉及到我所涉及的一些事情,我想我会分享一些额外的评论

Bigdedel.正如Isaac提到的,我在中使用了Azure表存储。如果您想使用Deedle API以交互方式浏览数据,并在将数据放入内存并运行计算之前进行一些过滤和范围限制,那么这一点非常有用。Bigdedle从可能非常大的外部数据源延迟加载数据。也就是说,如果您最终需要将所有数据加载到内存中,这可能对您没有多大用处

不过,Bigdedle中使用的存储模型可能很有用——它基于日期对数据进行分区,因此当您想要获取给定日期范围内的值时,它知道要查看哪个分区。根据我的经验,从ATS加载数据效果很好,特别是如果你可以在Azure中运行的Membrace集群上加载数据(这就是我的NDC演示最后所做的)

效率。我认为这种组合应该适用于10k或100k数据点-无论您是从F#还是从C#执行此操作,都没有区别。至于Deedle,我肯定用过这种大小的数据集——我们“根据需要”优化库。大多数函数已经相当有效,但可能有一些操作效率不高。如果您在GitHub上打开问题,这是可以修复的

重采样。有用于线性插值的内置函数(请参阅),但我怀疑您可能需要编写自己的自定义插值。Deedle不会对您“隐藏底层数据”,因此这并不难-上一个示例显示了一个使用线性插值填充缺失数据的自定义函数。如果您正在执行类似的操作,那么需要将数据存储在内存中(因此BigDeedle在这里不是很有用)

指定计算。我怀疑这是一个单独的问题,但是F#对于特定领域的语言来说非常好。我做了一个测试。通常,您可以指定自己的DSL(并对其进行解析),也可以使用嵌入式DSL,人们可以在其中编写F#的子集。F#对两者都有很好的支持


PS:如果您想在F#、Deedle和Azure表方面获得更多帮助,请随时联系。我很高兴与大家分享我的经验-您可以通过我的个人资料找到联系人。

谢谢!你对BigDeedle的建议让我参加了撰稿人(Tomas Petricek)在挪威国家数据中心奥斯陆的演讲。他的演示文稿展示了我们将进一步研究的一些功能。关于存储和Membrace的另一条评论-Azure存储帐户有一个IOPs的硬限制,因此您可以在任何时间从表中取出的容量都有一个上限。