在多个项目中,我们必须存储,汇总,评估简单的测量值。一行通常由时间戳,值和值的一些属性组成。在某些应用程序中,我们希望每秒存储1000个值以及更多值。这些值不仅必须插入,而且还必须以相同的速率删除,因为值的生命周期限制在一年左右(在不同的聚合步骤中,我们不会存储整年的1000 / s)。
到目前为止,我们已经开发出不同的解决方案。一个基于Firebird,一个基于Oracle,另一个基于一些自制存储机制。但这些都不是非常令人满意的解决方案。
两种RDBMS解决方案都无法处理所需的数据流。除此之外,传递值的应用程序(例如设备驱动程序)不能轻易附加到数据库,插入语句很麻烦。最后,虽然强烈需要具有数据的SQL接口,但典型的评估很难在SQL中制定并且执行速度慢。例如。在上个月的所有测量中,每15分钟找到一个带有时间戳的最大值。
自制解决方案可以处理插入速率,并且具有客户友好的API,但它没有像查询语言那样,并且不能通过某些标准接口用于其他应用程序,例如报告。
我梦想中的最佳解决方案是数据库系统:
您是否知道某些数据库接近这些要求,或者您是否会以不同的方式解决问题?
答案 0 :(得分:41)
其他大多数答案似乎都提到了基于SQL的数据库。基于NoSQL的数据库在这种情况下要优越得多。
一些开源时间序列数据库:
基于云的:
答案 1 :(得分:8)
Influxdb ::一个没有外部依赖关系的开源分布式时间序列数据库。
答案 2 :(得分:2)
考虑使用Informix DataBlade。
的IBM TimeSeries Dynamic Server然而,这是您正在使用的极端数据速率。 (不完全是欧洲核子研究中心的亚原子物理学,但是朝着那个大方向发展。)
公平披露:我在Informix DBMS上为IBM工作,但不是在TimeSeries DataBlade本身。
答案 3 :(得分:1)
SQL Server StreamInsight
答案 4 :(得分:1)
您可以尝试使用HDF5获取时间序列数据。这种应用程序非常快。
答案 5 :(得分:0)
正如Jonathan Leffler所说,您应该尝试使用Informix Timeseries功能。它包含在所有版本的Informix中,不收取额外费用。您可以查看它支持的TimeSeries函数:
IBM Informix Time series SQL routines
您可以通过sql函数或虚拟视图接口访问数据,甚至可以插入到视图中。