【大数据实战】你真的了解 Clickhouse 投影吗?

这篇具有很好参考价值的文章主要介绍了【大数据实战】你真的了解 Clickhouse 投影吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO TOP红人

Java知识图谱点击链接:体系化学习Java(Java面试专题)

💕💕 感兴趣的同学可以收藏关注下不然下次找不到哟💕💕

✊✊ 感觉对你有帮助的朋友,可以给博主一个三连,非常感谢 🙏🙏🙏

【大数据实战】你真的了解 Clickhouse 投影吗?,数据库,大数据,clickhouse,投影,java,原力计划

写在前面

🔔 近几年 Clickhouse 在大数据场景下表现非常不错,应用也越来越广,从事大数据场景开发的同学都可以学起来。目前我们系统已经通过它存储几十亿的数据了,性能依旧杠杠的。

1、Clickhouse 是什么?

ClickHouse是一个开源的列式数据库管理系统(DBMS),专门用于处理大规模数据分析和实时查询。它最初由俄罗斯的Yandex开发,于2016年开源发布。ClickHouse的设计目标是提供高性能、可扩展和可靠的数据存储解决方案,适用于需要快速处理大量数据的场景。

ClickHouse的诞生可以追溯到Yandex内部的需求。Yandex是俄罗斯最大的互联网公司之一,他们在处理大规模数据分析时遇到了传统数据库的性能瓶颈。为了解决这个问题,Yandex团队开始开发ClickHouse,以满足他们对高性能和可扩展性的需求。

在2016年,Yandex将ClickHouse开源发布,成为一个独立的开源项目。自此以后,ClickHouse逐渐吸引了全球范围内的用户和开发者的关注,并得到了广泛的应用。

ClickHouse的发展主要得益于其独特的设计理念和卓越的性能。作为一个列式存储的数据库,ClickHouse以列的方式存储数据,而不是传统的行式存储。这种设计使得ClickHouse能够在大规模数据分析场景下提供更高的查询性能和更好的压缩率。同时,ClickHouse还采用了并行处理和向量化查询等技术,以进一步提升查询性能。

随着时间的推移,ClickHouse的用户和社区不断增长,越来越多的公司和组织开始选择ClickHouse作为他们的数据分析和查询引擎。ClickHouse也在不断发展和改进,增加了更多的功能和特性,以满足不同用户的需求。

ClickHouse是一个高性能、可扩展和可靠的列式数据库管理系统,它在大规模数据分析和实时查询方面具有显著的优势。它的诞生和发展得益于Yandex的需求和开源社区的贡献,成为了一个备受关注和广泛应用的开源项目。

2、Clickhouse 投影是什么

在ClickHouse中,投影(Projection)是指对表的列进行预先计算和存储的过程。它类似于其他数据库中的索引,但在ClickHouse中更加灵活和强大。

投影的作用是为了加速查询操作。当查询涉及到大量的列或者需要进行复杂的计算时,ClickHouse可以利用预先计算的投影数据来提高查询性能。通过预先计算和存储列的值,ClickHouse可以避免在每次查询时重新计算这些值,从而减少查询的时间和资源消耗。

投影可以分为两种类型:普通投影和合并树投影。

  1. 🎄 普通投影(Ordinary Projection):普通投影是最常见的类型,它会为表的每个分区创建一个独立的投影。每个分区的投影都包含了该分区中所有列的预先计算值。当查询只涉及到某个特定分区时,ClickHouse可以直接使用该分区的投影数据进行查询,而无需扫描整个表。

  2. 🎄 合并树投影(Merging Tree Projection):合并树投影是一种更高级的投影类型,它可以跨多个分区对列进行预先计算和存储。合并树投影通过将多个分区的投影数据合并为一个更大的投影树来实现。这样,当查询涉及到多个分区时,ClickHouse可以利用合并树投影的数据进行查询,而无需扫描所有的分区。

通过使用投影,ClickHouse可以显著提高查询性能,并减少查询所需的时间和资源消耗。但是,投影的创建和维护需要一定的成本,因此需要根据具体的使用场景和需求来决定是否使用投影以及选择何种类型的投影。

3、投影的优缺点

投影(Projection)在数据库中的使用具有一些优点和缺点。下面是投影的一些优点和缺点:

优点:

  1. 🎄提高查询性能:通过预先计算和存储列的值,投影可以避免在每次查询时重新计算这些值,从而减少查询的时间和资源消耗。这可以显著提高查询性能,特别是在大规模数据和复杂查询的情况下。

  2. 🎄减少数据传输量:投影可以只选择性地包含查询所需的列,从而减少从数据库到应用程序的数据传输量。这可以降低网络延迟和带宽消耗,提高数据访问效率。

  3. 🎄优化存储布局:投影可以根据查询的需求重新组织和存储数据,以提高数据的访问效率。例如,可以将相关的列存储在一起,减少磁盘IO和内存访问的次数。

  4. 🎄支持复杂查询:通过使用合适的投影类型,可以预先计算和存储复杂查询所需的中间结果,从而简化查询的逻辑和计算过程。这可以提高查询的可读性和可维护性。

缺点:

  1. 🎄额外的存储开销:投影需要占用额外的存储空间来存储预先计算的列值。这会增加数据库的存储需求,并可能导致额外的存储成本。

  2. 🎄数据更新的复杂性:当原始数据发生变化时,投影数据也需要相应地进行更新。这需要额外的开销和处理逻辑,特别是在频繁更新的情况下。

  3. 🎄增加数据写入延迟:由于需要同时更新原始数据和投影数据,写入操作可能会变得更加复杂和耗时。这可能导致增加数据写入的延迟。

  4. 🎄可能存在数据不一致性:如果在更新原始数据和投影数据之间发生故障或错误,可能会导致数据不一致的情况出现。这需要进行适当的错误处理和数据一致性保证。

综上所述,投影在提高查询性能和优化数据访问方面具有明显的优势,但也需要考虑额外的存储开销和数据更新的复杂性。在决定是否使用投影时,需要根据具体的使用场景和需求进行权衡和评估。

4、投影如何使用

如何创建投影,以下是官方给的一个案例:

CREATE TABLE visits
(
   `user_id` UInt64,
   `user_name` String,
   `pages_visited` Nullable(Float64),
   `user_agent` String,
   PROJECTION projection_visits_by_user
   (
       SELECT
           user_agent,
           sum(pages_visited)
       GROUP BY user_id, user_agent
   )
)
ENGINE = MergeTree()
ORDER BY user_agent

🎄 1、增加投影

ALTER TABLE [db.]name [ON CLUSTER cluster] ADD PROJECTION [IF NOT EXISTS] name ( SELECT <COLUMN LIST EXPR> [GROUP BY] [ORDER BY] )

🎄 2、删除投影

ALTER TABLE [db.]name [ON CLUSTER cluster] DROP PROJECTION [IF EXISTS] name

🎄 3、创建投影

ALTER TABLE [db.]table [ON CLUSTER cluster] MATERIALIZE PROJECTION [IF EXISTS] name [IN PARTITION partition_name] 

🎄 4、物化投影

ALTER TABLE [db.]table [ON CLUSTER cluster] MATERIALIZE PROJECTION [IF EXISTS] name [IN PARTITION partition_name]

更详细的可以去官网学习一下:https://clickhouse.com/docs/en/sql-reference/statements/alter/projection

5、投影的原理

在ClickHouse中,通过投影可以加速查询。以下是通过投影快速查询的一般步骤:

  1. 🎄创建投影:使用ALTER TABLE语句为表创建投影。投影是根据表的结构和数据自动生成的,包含了查询常用的列和聚合信息。

  2. 🎄执行查询:使用SELECT语句执行查询操作。在查询中,ClickHouse会自动选择并使用最适合的投影来加速查询。

  3. 🎄列裁剪:投影数据只包含查询所需的列,而不是整个表的所有列。这样可以减少磁盘I/O和内存消耗,提高查询性能。

  4. 🎄数据预聚合:投影数据中已经预先计算了一些聚合信息,如最小值、最大值、总和等。查询时可以直接使用这些预计算的聚合结果,而不需要重新计算。

  5. 🎄利用索引:ClickHouse还支持使用索引来加速查询。在查询时,ClickHouse会自动选择并使用最适合的索引。

通过使用投影和其他优化技术,ClickHouse可以在查询时快速定位和读取所需的数据,减少磁盘I/O和CPU计算量,从而提高查询性能。

写在最后

在大数据场景下,无论什么方式,都离不开守恒定律,要查询快,就只能 “空间换时间”。

💕💕 本文由激流原创,原创不易,希望大家关注、点赞、收藏,给博主一点鼓励,感谢!!!
🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃
【大数据实战】你真的了解 Clickhouse 投影吗?,数据库,大数据,clickhouse,投影,java,原力计划文章来源地址https://www.toymoban.com/news/detail-609466.html

到了这里,关于【大数据实战】你真的了解 Clickhouse 投影吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据实战 --- 淘宝用户行为数据分析

    目录 开发环境  数据描述 功能需求 数据准备 数据清洗 用户行为分析 找出有价值的用户 Hadoop+Hive+Spark+HBase 启动Hadoop :start-all.sh 启动zookeeper :zkServer.sh start 启动Hive : nohup hiveserver2 1/dev/null 21 beeline -u jdbc:hive2://192.168.152.192:10000 启动Hbase : start-hbase.sh hbase shell 启动Spark :s

    2023年04月22日
    浏览(65)
  • (二十三)大数据实战——Flume数据采集之采集数据聚合案例实战

    本节内容我们主要介绍一下Flume数据采集过程中,如何把多个数据采集点的数据聚合到一个地方供分析使用。我们使用hadoop101服务器采集nc数据,hadoop102采集文件数据,将hadoop101和hadoop102服务器采集的数据聚合到hadoop103服务器输出到控制台。其整体架构如下: ①在hadoop101服务

    2024年02月09日
    浏览(51)
  • (二十)大数据实战——Flume数据采集的基本案例实战

    本节内容我们主要介绍几个Flume数据采集的基本案例,包括监控端口数据、实时监控单个追加文件、实时监控目录下多个新文件、实时监控目录下的多个追加文件等案例。完成flume数据监控的基本使用。 监控端口数据 ①需求说明 - 使用 Flume 监听一个端口,收集该端口数据,并

    2024年02月10日
    浏览(43)
  • 大数据实验 实验四:NoSQL 和关系数据库的操作比较

    理解四种数据库(MySQL、HBase、Redis 和 MongoDB)的概念以及不同点; 熟练使用四种数据库操作常用的 Shell 命令; 熟悉四种数据库操作常用的 Java API。 操作系统:centos7 Hadoop 版本:3.3; MySQL 版本:8.0.22; HBase 版本:2.4.11; Redis 版本:5.0.5; MongoDB 版本:5.0; JDK 版本:1.8; Java

    2024年04月16日
    浏览(39)
  • 大数据ClickHouse进阶(六):Distributed引擎深入了解

    文章目录 Distributed引擎深入了解 一、简单介绍 二、分布式表插入数据

    2024年01月15日
    浏览(36)
  • 大数据实战 --- 美团外卖平台数据分析

    目录 开发环境  数据描述 功能需求 数据准备 数据分析 RDD操作 Spark SQL操作 创建Hbase数据表 创建外部表 统计查询 Hadoop+Hive+Spark+HBase 启动Hadoop :start-all.sh 启动zookeeper :zkServer.sh start 启动Hive : nohup hiveserver2 1/dev/null 21 beeline -u jdbc:hive2://192.168.152.192:10000 启动Hbase : start-hbase

    2024年02月02日
    浏览(48)
  • (二十二)大数据实战——Flume数据采集之故障转移案例实战

    本节内容我们完成Flume数据采集的故障转移案例,使用三台服务器,一台服务器负责采集nc数据,通过使用failover模式的Sink处理器完成监控数据的故障转移,使用Avro的方式完成flume之间采集数据的传输。整体架构如下: ①在hadoop101服务器的/opt/module/apache-flume-1.9.0/job目录下创建

    2024年02月09日
    浏览(38)
  • 大数据实战 --- 世界新冠疫情数据分析

    目录 开发环境  数据描述 功能需求 数据准备 统计计算 Hbase Hive 分析数据 Hadoop+Hive+Spark+HBase 启动Hadoop :start-all.sh 启动zookeeper :zkServer.sh start 启动Hive : nohup hiveserver2 1/dev/null 21 beeline -u jdbc:hive2://192.168.152.192:10000 启动Hbase : start-hbase.sh hbase shell 启动Spark :spark-shell countryda

    2024年02月02日
    浏览(52)
  • (十九)大数据实战——Flume数据采集框架安装部署

    本节内容我们主要介绍一下大数据数据采集框架flume的安装部署,Flume 是一款流行的开源分布式系统,用于高效地采集、汇总和传输大规模数据。它主要用于处理大量产生的日志数据和事件流。Flume 支持从各种数据源(如日志文件、消息队列、数据库等)实时采集数据,并将

    2024年02月10日
    浏览(45)
  • (二十一)大数据实战——Flume数据采集之复制和多路复用案例实战

    本节内容我们完成Flume数据采集的一个多路复用案例,使用三台服务器,一台服务器负责采集本地日志数据,通过使用Replicating ChannelSelector选择器,将采集到的数据分发到另外俩台服务器,一台服务器将数据存储到hdfs,另外一台服务器将数据存储在本机,使用Avro的方式完成

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包