南京网站建设价格,篮球网站建设目标,wordpress新增标题,房地产家居网络平台文章目录 ClickHouse介绍为什么不推荐更新和删除如何实现更新操作如何实现删除操作官方文档 ClickHouse介绍
ClickHouse是由俄罗斯的Yandex公司开发的一款快速、可扩展的列式数据库管理系统。它专门针对OLAP场景设计#xff0c;在海量数据分析和查询方面具有出色的性能表现在海量数据分析和查询方面具有出色的性能表现同时还能支持实时数据插入和更新。ClickHouse采用了面向列的存储方式具有较高的压缩比和查询速度。它支持SQL语言并提供了一系列丰富的函数库可满足各种复杂的数据分析需求。同时ClickHouse还支持数据分区和分片可实现横向扩展ClickHouse使用C编写可在Linux和Windows等操作系统上运行。它还支持RESTful API和JDBC等多种接口方便与其他系统进行集成。由于其出色的性能和可扩展性ClickHouse被许多企业用于大规模数据处理和分析如Yandex、CloudFlare、Kenshoo等在使用ClickHouse时我们可以尽情的存储我们的海量数据也可以毫不忌讳的直接把海量数据使用SQL进行计算和统计但是对于数据变动来说ClickHouse并不建议大家使用数据更新和删除的SQL语句虽然他们提供了这些语句
为什么不推荐更新和删除
ClickHouse并不鼓励使用UPDATE和DELETE语句进行数据的更新和删除操作。主要原因有以下几点 ClickHouse是一个面向列的数据库其存储和查询数据的方式与传统的关系型数据库有很大不同。因此更新和删除操作需要涉及到多个列同时也会影响到索引的维护和数据的压缩等方面从而影响到整个系统的性能。 ClickHouse更适合于高并发的OLAP场景即大量的读操作和少量的写操作因此并不需要频繁的进行数据更新和删除操作。而针对需要对数据进行实时修改的OLTP场景ClickHouse也提供了其他解决方案如使用Kafka和ZooKeeper等技术实现数据的异步写入和更新。 ClickHouse的数据写入是append-only的方式即只能新增数据无法修改或删除已有数据。因此在实际应用中我们可以通过分区、TTL等技术来达到数据的删除和更新的效果。
ClickHouse更为推荐的方式是通过异步写入和更新等技术结合分区和TTL等策略来实现数据的删除和更新操作
如何实现更新操作
ClickHouse本身是一款列式存储数据库为了提高性能它采用了多版本控制MVCC机制来支持数据的更新操作当我们对ClickHouse中的一条记录执行更新操作时实际上会将原来的记录进行逻辑删除并在其基础上创建一条新的记录。被逻辑删除的记录会在后续的合并操作Merge中进行物理删除由于ClickHouse的数据是以列的方式存储所以在执行更新操作时只需要修改需要更新的列即可不会对其他列造成影响避免了全表扫描的情况从而提高了更新的效率除了MVCC机制外ClickHouse还提供了一些类似于事务的机制例如可以使用Transaction引擎来将多个数据操作绑定在同一个事务中保证数据一致性。同时ClickHouse还提供了Insert、Alter、Optimize等操作来优化数据更新的效率和执行速度虽然不建议使用但是执行后也能起到效果如果对实时性和准确性要求没那么高也可以使用实例如下某张表增加某个字段并设置一些值当然直接修改字段值也是这样ALTER table ... update ... where ...
-- 新增字段
ALTER table radar.traffic_event add column analysis_period String comment 分析时段早晚高峰;-- 设置数据值
ALTER table radar.traffic_event update analysis_period MORNING_RUSH_HOUR where toHour(time_stamp) 7 and toHour(time_stamp) 9 ;
ALTER table radar.traffic_event update analysis_period PEEK_DAY_HOUR where toHour(time_stamp) 9 and toHour(time_stamp) 17 ;
ALTER table radar.traffic_event update analysis_period EVENING_RUSH_HOUR where toHour(time_stamp) 17 and toHour(time_stamp) 19 ;
ALTER table radar.traffic_event update analysis_period PEEK_NIGHT_HOUR where analysis_period ;如何实现删除操作
ClickHouse有3种方式实现数据的删除
使用ALTER TABLE语句将表中的数据按照条件删除清空。
例如下面两条语句删除my_table 表所有记录删除traffic_event表字段approach 为空的记录
ALTER TABLE my_table DELETE WHERE 11
ALTER TABLE radar.traffic_event delete where approach ; 使用DROP PARTITION语句删除指定Partition的数据所以最好根据一定时间粒度建立分区。
例如此语句会删除my_table表中Partition键为’202101’的分区数据
ALTER TABLE my_table DROP PARTITION 202101还有一种方式在建表语句里设置TTL或者修改表设置TTL则数据在一定时间后自动删除
-- 修改表的 TTLtime_stamp超过一定时间的数据自动删除
ALTER TABLE flow_stats MODIFY TTL time_stamp toIntervalYear(5);
ALTER TABLE lane_status_in_phase MODIFY TTL time_stamp toIntervalYear(3);
ALTER TABLE passing_vehicle MODIFY TTL time_stamp toIntervalYear(3);
需要注意的是ClickHouse的设计思想是用快照和分区来存储数据因此数据删除操作实际上是逻辑删除在ClickHouse中数据的删除并不是物理删除而是通过标记删除的方式使数据不再可用如果对数据有真正的需求删除可以将数据移动到归档表或备份中然后再进行删除如果对删除后的数据不再关心可以直接用ALTER TABLE语句清空表中的所有数据。
官方文档
clickhouse官方文档很好大家可以去看看有中文版大部分都翻译了关于clickhouse官网文档关于alter操作可以点这里去查看