【问题标题】:What is the best approach to create aggregation tables?创建聚合表的最佳方法是什么?
【发布时间】:2013-07-14 07:37:41
【问题描述】:

我每 1 秒收集一次数据并存储在 hsqlDB 中。 我需要收集数据中每个指标的聚合数据(每 15 秒、1 分钟等)。 计算聚合值的最佳方法是什么?何时存储在数据库中? 我应该在线计算值并在数据库中每 15 秒存储一次吗?或者也许查询数据库以获得最后的结果并计算它们的聚合?我应该使用小聚合(15 秒)来计算大聚合(1 分钟)吗? 有免费的 java 工具吗?

【问题讨论】:

    标签: java aggregate hsqldb


    【解决方案1】:

    根据以前的经验,我建议使用实时数据库,它可能是非关系型的,具有处理时间序列的内置能力。这样,您应该能够避免存储计算的聚合数据。使用关系数据库,您很快就会得到数百万行,这些行将难以管理且访问速度很慢。您的另一个选择是对数据进行非规范化,并将每 1 小时的数据存储在单行中的 BLOB 列中(二进制格式)。

    【讨论】:

    • 嗨,我确实将聚合数据保存为单行,其中大部分是 BLOB 格式。当前更改数据库不是一种选择。我更需要的是进行聚合过程的正确方法。
    • 我们将实时数据存储在修改后的 Sybase 数据库服务器中。供应商提供了软件,将原始数据存储在单独的表格中,而不是汇总数据。不过都在 BLOB 上。在进行聚合时,您应该考虑四舍五入可能遇到的问题。当涉及到浮点运算时,加法、乘法不是关联和交换的。因此,对总和求和可能比串行求和更好。
    【解决方案2】:

    可以使用 HSQLDB 是 MVCC 模式进行并发读写。

    如果原始数据的表具有索引时间戳列,则使用 SELECT 语句对范围进行聚合计算非常快。因为带有聚合计算的 SELECT 语句同时发生,所以您可以使用单独的线程每 1 秒和每 15 秒执行一次操作。

    【讨论】:

    • 我实际上已经索引了时间戳索引。 hsqldb 是否自动支持 MVCC 还是我需要实现它?另一件事是,需要聚合的数据存储为 BLOB。
    • MVCC 是 HSQLDB 中的一个设置,您可以选择。如果您的数据实际上是一个 blob,则需要从中提取字段。
    猜你喜欢
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多