我们正在研究将Azure表存储(ATS)与Deedle(或具有类似功能的其他库)一起用于我们的时间序列存储,操作和计算。从我可以阅读的内容来看,F#似乎也是阵列操作的不错选择。
我们的出发点是一组能耗时间序列。该系列将是一个区间内的消耗(固定或不规则的间隔)或一个计数器(我们可以从中计算从一个读数到下一个读数的消耗量)。由于数据点只是一个标记(用作分区键),时间戳(rowkey)和值,因此它非常适合ATS。
从用户的角度来看,他们希望对给定时期和分辨率的系列进行计算,例如:计算第三个系列作为另一个系列之间的差异,对于一个给定的年份,每月解决。
这提出了许多问题:
任何评论都将受到高度赞赏!
答案 0 :(得分:2)
Azure表存储 - 确保正确选择分区+行键。有很多关于选择Azure表存储分区键的文档,特别是在时间序列中 - 确保将行分组到正确的级别以确保数据的分布,分区不会太大或太小。您可能还想查看Azure存储类型提供程序和/或Azure存储F#库,这使得使用ATS比使用标准.NET SDK更容易。
Deedle AFAIK确实能够跨时间序列替换缺失值,并且至少有一个名为BigDeedle的项目直接在ATS上运行(尽管我不确定这个项目有多准备好)。
答案 1 :(得分:2)
我认为艾萨克已经提到了最重要的一点,但由于这个问题涉及我所涉及的一些事情,我想我还要分享一些额外的评论!
BigDeedle。正如Isaac所说,我在BigDeedle中使用了Azure表存储。如果您希望使用Deedle API以交互方式浏览数据,并在将数据存入内存并运行计算之前执行一些过滤和范围限制,则此功能非常有用。 BigDeedle从可能非常大的外部数据源中懒洋洋地加载数据。也就是说,如果您最终需要将所有数据加载到内存中,这对您来说可能并不那么有用。
BigDeedle中使用的存储模型可能很有用 - 它根据日期对数据进行分区,因此当您想要获取给定日期范围内的值时,它知道要查看哪些分区。根据我的经验,从ATS加载数据效果非常好,特别是如果你可以在Azure中运行的MBrace集群上进行(这是我的NDC演示最终的作用)。
效率。我认为组合应该适用于10k或100k数据点 - 无论您是使用F#还是C#进行此操作都没有区别。至于Deedle,我肯定会将它与这种大小的数据集一起使用 - 我们根据需要优化库#34;"。大多数功能已经非常有效,但可能有些操作效率不高。如果您在GitHub上打开问题,这可以修复。
重新采样。有线性插值的内置函数(请参阅here),但我怀疑您可能需要编写自己的自定义插值。 Deedle不会隐藏基础数据"来自你,所以这不是太难 - this page上的最后一个例子显示了一个自定义函数,用于填充使用线性插值的缺失数据。如果您正在做这样的事情,那么您需要将数据存储在内存中(因此BigDeedle在这里不会非常有用)。
指定计算。我怀疑这是一个单独的问题,但F#非常适合特定于域的语言。我做了talk on that at earlier NDC。通常,您可以指定自己的DSL(并解析它),也可以使用嵌入式DSL来编写F#的子集。 F#对两者都有很好的支持。
PS:如果您想获得有关F#,Deedle和Azure表格的更多帮助,请随时与我们联系。我很高兴分享我的经验 - 您应该能够通过我的个人资料找到联系人。