数据库中sql数据的智能离散化

xyhw6mcr  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(331)

对于我的未来项目,我有一个clickhouse数据库。这个数据库由rabbitsmq提供的几个微服务自己提供。
数据如下所示:

| Datetime            | nodekey | value |
| 2018-01-01 00:10:00 |      15 |   156 |
| 2018-01-01 00:10:00 |      18 |   856 |
| 2018-01-01 00:10:00 |      86 |     8 |
| 2018-01-01 00:20:00 |      15 |   156 |
| 2018-01-01 00:20:00 |      18 |    84 |
| 2018-01-01 00:20:00 |      86 |    50 |
 ......

所以对于几百个不同的nodekey,我每10分钟有一个值。
我需要有另一个表的总和或平均值(取决于nodekey类型)的值为每小时。。。
我的第一个想法就是使用crontab。。。但数据并没有在流体流动中传递,有时微服务会增加2-3个新值,有时一周的数据传递。。。我很少需要大量插入一年的新数据。。。
目前,我只有几百个nodekey,但这个项目将继续发展。
所以,我认为使用crontab或循环数据库来更新数据不是一个好主意。。。
我还有什么选择?

hs1rzwqc

hs1rzwqc1#

创建一个视图怎么样?

create view myview as
select 
    toStartOfHour(datetime) date_hour,
    nodekey,
    sum(value) sum_value
from mytable
group by 
    toStartOfHour(datetime),
    nodekey

这种方法的优点是不需要担心刷新数据。在查询视图时,您实际上访问了底层的实时数据。缺点是,当数据集变得非常大时,它可能无法很好地扩展(处理视图的查询往往会变慢)。
中间的一个选择是使用物化视图,它将持久化数据。如果我正确理解clickhouse文档,那么在修改源表中的数据时,物化视图会自动更新,这似乎与您要查找的内容接近(但是您需要使用适当的引擎,这可能会影响插入的性能)。

相关问题