博客 / 产品

ClickHouse Newsletter 2022年10月刊:云服务已至

author avatar
Christoph Wurm
2022年10月13日 - 9 分钟阅读

本月,让我们从一些重要的天气信息开始,然后深入了解九月发布版本,并以一些线程工作作为结尾。

顺便说一句,如果您正在我们的网站上阅读本文,您是否知道您也可以在收件箱中收到每月的新闻通讯电子邮件?在此处注册

ClickHouse Cloud Beta

如果您是本新闻通讯的常读者,那么您就知道我们一直在努力构建我们的 ClickHouse Cloud 托管服务。在 2022 年 10 月 4 日星期二,我们向全世界发布了 Beta 版本!

这不仅仅是一个 ClickHouse 托管服务。如今,当您自己运行 ClickHouse 时,您可能在某些 VM 或 Kubernetes Pod 上运行它,并配置复制、分片、集群、分布式表等,以实现高可用性和可扩展性。这并不是我们对 ClickHouse Cloud 所做的事情。相反,我们将数据移动到所有 ClickHouse 节点都可以访问的共享对象存储中。这样一来,无需为复制和分片配置任何额外的东西 - 对象存储已经过复制,并且实际上是无限可扩展的。此外,对象存储比块存储便宜数倍。

为什么这很重要?作为用户,您将受益于显著降低的存储价格以及为您处理所有数据存储的易用性。不再需要设置副本和分片,也不用担心在向上或向下扩展集群时如何重新平衡它们。不再需要担心升级(我们为您完成)。也不再需要担心备份(我们也为您完成)。当然,我们 24/7/365 全天候监控和支持 ClickHouse Cloud。

ClickHouse Cloud 是唯一由 ClickHouse 创建者构建并从头开始为云设计的官方 ClickHouse 托管服务。试试看!

这是发布博客文章快速入门指南,当您准备好后,请访问我们的网站并点击“立即试用”按钮。请记住,它仍然是一个 Beta 服务,因此我们非常感谢您的任何反馈。另请务必注册我们本月晚些时候的发布网络研讨会,直接从我们的团队了解有关 ClickHouse Cloud 的信息。

即将到来的活动

标记您的日历

ClickHouse v22.10 版本发布网络研讨会

  • 时间?已更改为: 10 月 26 日星期三上午 9 点(太平洋标准时间)/ 下午 6 点(欧洲中部夏令时间)
  • 如何加入? 在此处注册

ClickHouse Cloud 发布网络研讨会

  • 内容? 加入我们的虚拟发布会,揭晓我们的托管服务。我们将介绍所有功能,并让您了解幕后花絮。迫不及待想告诉您所有关于它的信息!
  • 时间? 10 月 27 日星期四上午 9 点(太平洋标准时间)/ 下午 6 点(欧洲中部夏令时间)
  • 如何加入? 在此处注册

AWS re:Invent

  • 内容? ClickHouse 团队的多名成员将参加 re:Invent!有兴趣与我们会面,也许喝一杯饮料,并讨论 ClickHouse 吗?请告诉我们!
  • 地点? 内华达州拉斯维加斯
  • 时间? 2022 年 11 月 29 日 - 12 月 3 日

ClickHouse v22.9

我们今年秋季的第一个版本,带有一些很棒的新功能

  1. 向量搜索 (ANN) ClickHouse 有一个新的索引类型 annoy。它为近似最近邻 (ANN) 搜索实现了一个搜索索引,以快速查找多维空间(向量搜索)中的最近邻。这是一项实验性功能。
  2. KeeperMap 表引擎 一种新的表引擎 KeeperMap 允许在 ClickHouse Keeper 或 ZooKeeper 中存储少量键值数据。这是一项实验性功能。
  3. 自动选择仲裁 您现在可以设置 insert_quorum = auto,让 ClickHouse 自动选择大多数副本写入插入,然后再向客户端报告成功。注意:使用 insert_quorum 会使插入花费更长时间。
  4. 只读用户现在可以更改设置 允许只读用户更改某些设置可能很有用,例如线程数或表过滤器。设置 changeable_in_readonly 允许您做到这一点。
  5. INTERSECT DISTINCT 和 EXCEPT DISTINCT 当合并来自两个查询的结果时,现在可以在使用 INTERSECT(仅返回两个查询中都存在的行)和 EXCEPT(仅返回第一个查询中存在但第二个查询中不存在的行)时删除重复行。
  6. 官方 Node.js 客户端 ClickHouse 现在有了一个用 Typescript 编写的官方 Node.js 客户端。它支持通过 HTTP(S) 读取和写入数据。试试看!

查看发布网络研讨会幻灯片录像,并请升级,除非您想停留在长期支持 (LTS) 版本上。

本月查询:线程数越多并不总是越好

许多人在使用 ClickHouse 一段时间后,会发现线程的魔力。也许加载数据的时间比您希望的要长,或者查询速度比您的老板希望的要慢。因此,您进行了一些谷歌搜索,并在对 StackOverflow 上的一个旧问题的回答中,您了解了 max_threads 以及如何使用它来加速一切。

然而,就像生活和技术中经常出现的情况一样,事情并没有那么简单!

默认情况下,ClickHouse 将尝试根据可用 CPU 核心数确定正确的线程数。您可以使用 SELECT getSetting('max_threads') 检查它被设置为多少。例如,在我的 MacBook Pro 上,它返回 10,这是 Apple M1 芯片中的核心数(是的,ClickHouse 可以在 ARM 上运行!)。

您可以将其设置为使用更多线程,但这并不总是有效。例如,尝试这个(在您创建正确的表结构后,请参阅此处

INSERT INTO ontime SELECT *
FROM s3('https://clickhouse-public-datasets.s3.amazonaws.com/ontime/csv_by_year/*.csv.gz', CSVWithNames)
SETTINGS max_threads = 100

除非您有一台非常大的机器,否则它将无法完成 - 并且在此过程中会使用大量内存。实际上,100 个线程中的每一个都是一个单独的插入子查询,并且需要自己的内存来检索和写入数据。

那么您应该设置 max_threads = 1 吗?嗯,也许 - 对我来说,当限制为单个线程时,上面的查询将以每秒约 12 万行的速度插入数据。在没有 max_threads 的情况下,它将以每秒 32 万行的速度插入。但是,对我来说最佳插入速度是使用 4 个线程 - 每秒 42.8 万行,比线程自动检测快约 33%。有时进行实验是值得的。

同样,在读取数据时,线程数越多并不总是越好。是的,更多线程意味着查询可以使用更多的 CPU 周期。但是,这也意味着有更多独立的状态,所有这些状态都需要合并在一起,然后才能返回结果。最重要的是,每个查询使用太多线程会减少每秒可以运行的查询数。

例如,使用英国房产价格支付数据集,我们可以使用以下方法检查最受欢迎的街道名称是什么

SELECT count(), street FROM uk_price_paid
GROUP BY street ORDER BY count() DESC

前 3 名:High Street、Station Road、London Road。在接下来的 7 名中,有 Church Road、Church Street 和 Church Lane - 在君主制国家,国王既是国家元首又是教会元首,这也许并不奇怪。

上面的查询在我的机器上花费 0.2 秒。如果我设置 max_threads = 1,则需要 0.5 秒。所以线程数越多越好,对吗?

在这种情况下,是的 - 除非我想同时多次运行此查询。我可以使用 clickhouse-benchmark 同时执行 10 个查询 10 次(总共 100 个查询)

clickhouse-benchmark -c 10 -i 100 -q "<query>”

在我的机器上,运行所有 100 个查询大约需要 27 秒,每秒不到 4 个查询(根据结果,QPS: 3.776)。

使用 max_threads = 1 大约需要 10 秒,或每秒 13 个查询(QPS: 13.122)。查询吞吐量高出三倍!而我们所要做的就是更改线程数 - 但要降低,而不是升高。通常,如果您期望大量并发查询,则应考虑显式降低每个查询的线程数。

阅读角

我们一直在阅读什么

感谢您的阅读,我们下个月再见。请测试 ClickHouse Cloud!

ClickHouse 团队

分享这篇文章

订阅我们的新闻通讯

随时了解功能发布、产品路线图、支持和云服务!
正在加载表单...
关注我们
X imageSlack imageGitHub image
Telegram imageMeetup imageRss image