Sql 数据库中数据的智能离散化
对于我的未来项目,我有一个ClickHouse数据库。该数据库由rabbitsMQ提供的几个微服务提供 数据如下所示:Sql 数据库中数据的智能离散化,sql,database,loops,rabbitmq,clickhouse,Sql,Database,Loops,Rabbitmq,Clickhouse,对于我的未来项目,我有一个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
| 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或循环数据库更新数据不是一个好主意
我的其他选择是什么?创建一个视图怎么样
create view myview as
select
toStartOfHour(datetime) date_hour,
nodekey,
sum(value) sum_value
from mytable
group by
toStartOfHour(datetime),
nodekey
这种方法的优点是不需要担心刷新数据。查询视图时,您实际上访问了底层实时数据。缺点是,当您的数据集变得非常大时,它可能无法很好地扩展(处理视图的查询往往会变慢)
一个中间选项是使用将持久化数据的。如果我正确理解了clickhouse文档,当源表中的数据被修改时,物化视图会自动更新,这似乎与您要查找的内容接近(但是您需要使用适当的引擎,这可能会影响插入的性能)。事实上,小时数是第一步,我要谨慎地对待每一天、每一周、每一个月等。。。总共大概有30张这样的桌子。。。我喜欢视图方法,但我对视图视图的性能感到惊讶…@Andrelec1:只需为每个聚合级别创建一个视图。您可以将
toStartOfHour()
更改为toStartOfDay()
,toStartOfWeek()
,依此类推。