有没有一个强大的数据库系统适用于时间序列数据?

64
在多个项目中,我们需要存储、聚合和评估简单的测量值。一行通常包括时间戳、值以及与该值相关的一些属性。在一些应用程序中,我们希望每秒存储1000个及以上值。这些值不仅必须被插入, 而且也必须按相同的速率删除,因为值的生命周期仅限于一年左右(在不同的聚合步骤中,我们不会为整个年度存储1000/s)。
到目前为止,我们已经开发了不同的解决方案。其中一个基于Firebird,一个基于Oracle,另一个是基于自制的存储机制。但是,这些解决方案都不是非常令人满意的。
两个关系数据库管理系统(RDBMS)解决方案无法处理所需的数据流。除此之外,提供值的应用程序(例如设备驱动程序)不能轻松地附加到数据库中,插入语句很繁琐。最后,虽然强烈希望有SQL接口来访问数据,但是使用SQL进行典型的计算是很难表达的,并且执行速度很慢。例如,查找最大的时间戳值,每15分钟针对过去一个月的所有测量值。
自制的解决方案可以处理插入速率,并具有客户友好型的API进行操作,但是它没有类似查询语言的东西,并且不能通过某些标准接口(例如报告)由其他应用程序使用。
在我的梦中最好的解决方案将是一个数据库系统, 它:
  • 提供非常快速的插入API
  • 能够以相同的速度删除/截断值
  • 提供标准SQL接口,并为典型的时间序列数据提供特定支持
你是否知道一些接近这些要求的数据库,或者您会采用不同的方法来解决这个问题呢?

为了快速和方便的(内存中)处理,您可以尝试使用 pandas;对于快速 IO -- PyTables - jfs
另外,您可以尝试Starcounter。它可以在单个Windows Server 2008上处理数百万个SQL请求每秒。它仍处于封闭测试阶段,但已经在非常大的安装中运行了一段时间。发送电子邮件即可获得副本。 - Jack Wester
我有一个类似的问题,如果不是完全相同的话,也被关闭了,所以我把它移到这里:http://softwarerecs.stackexchange.com/questions/18302/database-for-large-volume-of-metrics-key-value-timestamp - aep
6个回答

43

大多数其他答案似乎提到了基于SQL的数据库。基于NoSQL的数据库在这方面要优越得多。

一些开源的时间序列数据库:

基于云的:

    这段内容是一个HTML标记,其中包括一个链接,链接指向网站"https://www.tempoiq.com"。

1
你看过列式数据库吗? - hellomichibye
1
维基百科提供了一个概述:https://en.wikipedia.org/wiki/Time_series_database#Example_TSDB_Systems - koppor
3
Erol提供了完整的列表:http://www.erol.si/2015/01/the-complete-list-of-all-timeseries-databases-for-your-iot-project/ - koppor
由于OpenTSDB在列表中,我想提一下Axibase时序数据库,因为它支持opentsdb协议和tcollector本身,截至2015年5月:http://axibase.com/products/axibase-time-series-database/writing-data/tcollector/。 - Sergei Rodionov
这是一个很棒的列表。将Blueflood(基于Cassandra)加入其中:https://github.com/rackerlabs/blueflood - VinnyQ77
显示剩余2条评论

8

influxdb :: 一个无需外部依赖的开源分布式时间序列数据库。


6
除非你付费,否则它不会被分发。(https://docs.influxdata.com/influxdb/v1.0/high_availability/clusters/) - Quinton Pike

2
考虑使用带有TimeSeries DataBlade的IBM Informix Dynamic Server。
然而,这是一个极端的数据速率,您正在处理该数据速率。 (虽然不完全到达CERN的亚原子物理水平,但朝着那个方向前进。)
公平披露:我在IBM工作,从事Informix DBMS的工作,但不是直接从事TimeSeries DataBlade。

1

谢谢你的提示。StreamInsight听起来很有趣,我需要调查一下。最重要的是,据我所了解,它已经包含在SQL Server中了?我的担忧是:存储仍然在SQL Server中。它能处理所请求的数据流吗?StreamInsight文档说它可以处理高达每秒100,000个事件的“峰值时间”,但那一定是指某种缓冲。稳态速率是多少? - Kit Fisto
存储速度取决于您的硬件;只要足够投入,您就可以达到每秒17.2GB的速度!通过一个良好的12-18盘RAID阵列,每秒1.2GB的速度是可以实现的。 - Mitch Wheat

1
您可以尝试使用HDF5处理时间序列数据。对于此类应用程序,它非常快速。

1
HDF5似乎是一种存储格式。您能否在时间序列数据的上下文中更详细地阐述其用法? - koppor
一个基于HDF5的Python库可以在https://github.com/afiedler/tstables找到。 - koppor

0
正如Jonathan Leffler所说,您应该尝试Informix Timeseries功能。它包含在所有版本的Informix中,无需额外费用。您可以查看它支持的TimeSeries函数: IBM Informix Time series SQL routines 您可以通过SQL函数或虚拟视图接口访问数据,甚至可以插入到视图中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接