本月,让我们先从一些重要的天气信息开始,然后深入探讨 9 月份的发布内容,最后总结一下一些线程工作。
顺便说一下,如果您是在我们的网站上阅读此内容,您是否知道您可以通过电子邮件接收每个月的新闻简报?在 这里 注册。
ClickHouse Cloud 测试版
如果您是本新闻简报的常客,那么您知道我们一直在努力构建我们的 ClickHouse Cloud 托管服务。在 2022 年 10 月 4 日星期二,我们向全世界推出了测试版!
它不仅仅是一个 ClickHouse 托管服务。如今,当您自己运行 ClickHouse 时,您可能是在一些虚拟机或 Kubernetes Pod 上运行它,并配置复制、分片、集群、分布式表等,以实现高可用性和可扩展性。我们对 ClickHouse Cloud 的做法并不相同。相反,我们将数据迁移到所有 ClickHouse 节点都可以访问的共享对象存储中。这样一来,就不需要为复制和分片配置任何额外的东西——对象存储本身就是复制的,并且实际上可以无限扩展。此外,对象存储比块存储便宜数倍。
这有什么意义?作为用户,您可以从明显更低的存储价格以及所有数据存储都为您管理起来使用的简便性中获益。无需再设置副本和分片,也不必担心在向上或向下扩展集群时如何重新平衡它们。无需再担心升级(我们为您处理)。无需再担心备份(我们也为您处理)。当然,我们全天候不间断地为您监控和支持 ClickHouse Cloud。
ClickHouse Cloud 是由 ClickHouse 的创建者构建的唯一官方 ClickHouse 托管服务,它从一开始就专为云设计。试一试!
以下是 发布博客文章、快速入门指南,以及当您准备好进入 我们的网站 时,点击“立即试用”按钮。请记住,它仍然是测试版服务,因此我们非常感谢您提供任何反馈。此外,请务必注册本月晚些时候举办的 发布网络研讨会,从我们的团队那里直接了解有关 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
今年我们第一个秋季版本,其中包含一些新功能
- 矢量搜索 (ANN) ClickHouse 拥有一个新的索引类型
annoy
。它实现了用于近似最近邻 (ANN) 搜索的搜索索引,以便在多维空间中快速找到最近邻(矢量搜索)。这是一个实验性功能。 - KeeperMap 表引擎 一个新的表引擎
KeeperMap
允许在 ClickHouse Keeper 或 ZooKeeper 中存储少量键值数据。这是一个实验性功能。 - 自动选择仲裁 您现在可以设置
insert_quorum = auto
,让 ClickHouse 自动选择大多数副本以写入插入,然后向客户端报告成功。注意:使用 insert_quorum 将使插入需要更长时间。 - 只读用户现在可以更改设置 允许只读用户更改某些设置(例如线程数量或表过滤器)可能很有用。设置
changeable_in_readonly
允许您做到这一点。 - INTERSECT DISTINCT 和 EXCEPT DISTINCT 在组合来自两个查询的结果时,现在可以使用 INTERSECT(仅返回同时出现在两个查询中的行)和 EXCEPT(仅返回出现在第一个查询中但没有出现在第二个查询中的行)来移除重复行。
- 官方 Node.js 客户端 ClickHouse 现在拥有一个用 Typescript 编写的官方 Node.js 客户端。它支持通过 HTTP(S) 读取和写入数据。试一试!
查看 发布网络研讨会幻灯片、录制,如果您不想停留在长期支持 (LTS) 版本上,请升级。
本月查询:更多线程并不总是更好
许多人在使用 ClickHouse 一段时间后,会发现线程的魔力。也许加载数据所需的时间比您想要的更长,或者查询速度比您的老板想要的更慢。因此,您进行了一些谷歌搜索,在一个关于 max_threads 的旧 StackOverflow 问题的答案中,您了解到它如何用于加快一切速度。
然而,就像生活中和技术中经常发生的那样,情况并非如此简单!
默认情况下,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
设置为吗?嗯,也许吧 - 对我来说,上面的查询在限制为单个线程的情况下,每秒大约可以插入 120k 行数据。没有 max_threads
,它将每秒插入 320k 行数据。但是,对我来说,最佳插入速度是使用 4 个线程 - 每秒 428k 行数据,比线程自动检测快约 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 云现在处于公开测试阶段 这是我们发布的全新且唯一的官方 ClickHouse 托管服务,由 ClickHouse 的创建者提供。
- 将数据导入 ClickHouse - 第 3 部分 - 使用 S3 将数据导入 ClickHouse 的系列文章的第 3 部分。请查看第 1 部分和第 2 部分(此处 和 此处)。
- 使用 ClickHouse 可视化数据 - 第 1 部分 - Grafana 使用 ClickHouse 可视化数据的系列文章的第一篇。我们将从 Grafana 开始,然后发布有关 Superset 和 Metabase 的文章。
感谢您的阅读,我们下个月再见。请测试 ClickHouse 云!
ClickHouse 团队