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