我有一个项目,我们采样“大量”的数据每秒的基础上。一些操作作为筛选等执行,然后需要以秒、分、小时或天间隔访问它。
我们目前使用一个基于sql的系统和一个更新不同表(日平均值、小时平均值等)的软件来完成这个过程。
我们目前正在寻找其他的解决方案是否能够满足我们的需求,我已经介绍了几个解决方案,如open tsdb、google cloud dataflow和influxdb。
所有这些似乎都解决了timeseries的需求,但是很难获得关于内部的信息。opentsdb确实提供了降采样,但没有明确说明如何实现。
我们需要的是因为我们可以查询大量的数据,例如一年,如果数据库在查询时下降并且没有预先计算,可能需要很长的时间。
同样,当添加了“延迟”数据点时,需要“更新”下采样。
最重要的是,在数据到达时,我们执行一些处理(OutLink滤波器,校准),并且这些操作不应该写在磁盘上,一些解决方案可以像一个基于RAM的DB一样使用,但是也许会有一些更优雅的解决方案与以前的规范一起工作。
我相信这个应用程序并不是什么“奢侈”的东西,它必须存在一些工具来实现这一点,我正在考虑库存管理、监控等等。
也许您对我应该关注哪些技术/db有一些好的建议。
谢谢。
最佳答案
使用google cloud dataflow可以很容易地完成这样的用例。数据预处理和优化查询是云数据流的主要场景之一。
我们不提供内置的“downsample”原语,但是您可以轻松地编写这样的数据转换。如果只是想删除不必要的数据,可以使用ParDo
。对于非常简单的情况,Filter.byPredicate
基元可以更简单。
或者,如果要将多个数据点合并为一个数据点,一种常见的模式是根据时间戳对其进行细分。然后,可以使用window合并每个窗口的元素。
您提到的其他处理可以很容易地附加到同一数据处理管道中。
就比较而言,云数据流并不能真正与数据库相媲美。数据库主要是具有处理能力的存储解决方案。云数据流主要是一种数据处理解决方案,它连接到其他产品以满足其存储需求。您应该期望基于云数据流的解决方案更具可扩展性和灵活性,但这也带来更高的总体成本。