创建聚合表的最佳方法是啥?
Posted
技术标签:
【中文标题】创建聚合表的最佳方法是啥?【英文标题】:What is the best approach to create aggregation tables?创建聚合表的最佳方法是什么? 【发布时间】:2013-07-14 07:37:41 【问题描述】:我每 1 秒收集一次数据并存储在 hsqlDB 中。 我需要收集数据中每个指标的聚合数据(每 15 秒、1 分钟等)。 计算聚合值的最佳方法是什么?何时存储在数据库中? 我应该在线计算值并在数据库中每 15 秒存储一次吗?或者也许查询数据库以获得最后的结果并计算它们的聚合?我应该使用小聚合(15 秒)来计算大聚合(1 分钟)吗? 有免费的 java 工具吗?
【问题讨论】:
【参考方案1】:根据以前的经验,我建议使用实时数据库,它可能是非关系型的,具有处理时间序列的内置能力。这样,您应该能够避免存储计算的聚合数据。使用关系数据库,您很快就会得到数百万行,这些行将难以管理且访问速度很慢。您的另一个选择是对数据进行非规范化,并将每 1 小时的数据存储在单行中的 BLOB 列中(二进制格式)。
【讨论】:
嗨,我确实将聚合数据保存为单行,其中大部分是 BLOB 格式。当前更改数据库不是一种选择。我更需要的是进行聚合过程的正确方法。 我们将实时数据存储在修改后的 Sybase 数据库服务器中。供应商提供了软件,将原始数据存储在单独的表格中,而不是汇总数据。不过都在 BLOB 上。在进行聚合时,您应该考虑四舍五入可能遇到的问题。当涉及到浮点运算时,加法、乘法不是关联和交换的。因此,对总和求和可能比串行求和更好。【参考方案2】:可以使用 HSQLDB 是 MVCC 模式进行并发读写。
如果原始数据的表具有索引时间戳列,则使用 SELECT 语句对范围进行聚合计算非常快。因为带有聚合计算的 SELECT 语句同时发生,所以您可以使用单独的线程每 1 秒和每 15 秒执行一次操作。
【讨论】:
我实际上已经索引了时间戳索引。 hsqldb 是否自动支持 MVCC 还是我需要实现它?另一件事是,需要聚合的数据存储为 BLOB。 MVCC 是 HSQLDB 中的一个设置,您可以选择。如果您的数据实际上是一个 blob,则需要从中提取字段。以上是关于创建聚合表的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章