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