【发布时间】:2013-07-14 07:37:41
【问题描述】:
我每 1 秒收集一次数据并存储在 hsqlDB 中。 我需要收集数据中每个指标的聚合数据(每 15 秒、1 分钟等)。 计算聚合值的最佳方法是什么?何时存储在数据库中? 我应该在线计算值并在数据库中每 15 秒存储一次吗?或者也许查询数据库以获得最后的结果并计算它们的聚合?我应该使用小聚合(15 秒)来计算大聚合(1 分钟)吗? 有免费的 java 工具吗?
【问题讨论】:
我每 1 秒收集一次数据并存储在 hsqlDB 中。 我需要收集数据中每个指标的聚合数据(每 15 秒、1 分钟等)。 计算聚合值的最佳方法是什么?何时存储在数据库中? 我应该在线计算值并在数据库中每 15 秒存储一次吗?或者也许查询数据库以获得最后的结果并计算它们的聚合?我应该使用小聚合(15 秒)来计算大聚合(1 分钟)吗? 有免费的 java 工具吗?
【问题讨论】:
根据以前的经验,我建议使用实时数据库,它可能是非关系型的,具有处理时间序列的内置能力。这样,您应该能够避免存储计算的聚合数据。使用关系数据库,您很快就会得到数百万行,这些行将难以管理且访问速度很慢。您的另一个选择是对数据进行非规范化,并将每 1 小时的数据存储在单行中的 BLOB 列中(二进制格式)。
【讨论】:
可以使用 HSQLDB 是 MVCC 模式进行并发读写。
如果原始数据的表具有索引时间戳列,则使用 SELECT 语句对范围进行聚合计算非常快。因为带有聚合计算的 SELECT 语句同时发生,所以您可以使用单独的线程每 1 秒和每 15 秒执行一次操作。
【讨论】: