ClickHouse 24.6 版本发布说明

图片

本文字数:14127;估计阅读时间:36 分钟

作者:ClickHouse team

本文在公众号【ClickHouseInc】首发

图片

又到了发布新版本的时间!

发布概要

本次ClickHouse 24.6 版本包含了23个新功能🎁、24项性能优化🛷、59个bug修复🐛

新贡献者

我们向 24.6 版本的所有新贡献者表示特别欢迎!ClickHouse 的流行离不开社区的贡献,看到社区不断壮大,总是令人感动。

以下是新贡献者的名字:

Artem Mustafin、Danila Puzov、Francesco Ciocchetti、Grigorii Sokolik、HappenLee、Kris Buytaert、Lee sungju、Mikhail Gorshkov、Philipp Schreiber、Pratima Patel、Sariel、TTPO100AJIEX、Tim MacDonald、Xu Jia、ZhiHong Zhang、allegrinisante、anonymous、chloro、haohang、iceFireser、morning-color、pn、sarielwxm、wudidapaopao、xogoodnow

最佳表排序

由 Igor Markelov 贡献

MergeTree 表的物理磁盘顺序是由其 ORDER BY 键决定的。

ORDER BY 键和相应的物理行顺序有三个主要目的:

1. 构建稀疏索引以处理范围请求(也可以指定为 PRIMARY KEY)。

2. 定义合并模式的键,例如 AggregatingMergeTree 或 ReplacingMergeTree 表。

3. 通过在列文件中联合存储数据来提高压缩效果。

为了实现第三个目的,本次发布引入了一个新设置,称为 optimize_row_order。这个设置仅适用于普通的 MergeTree 引擎表。在按 ORDER BY 列排序后,它会根据列的基数对剩余列进行排序,以确保最佳压缩效果。

如果数据具有一定的模式,通用压缩编解码器如 LZ4 和 ZSTD 可以实现最高的压缩率。例如,连续相同值的长序列通常能很好地压缩。通过按列值排序行,可以实现这样的长序列,从最低基数列开始。下图对此进行了说明:

图片

如上图所示,行在磁盘上按列值排序,从最低基数列开始,每列中会有长时间运行相同的值。这样可以提高表部分列文件的压缩比。

作为反例,下图展示了首先按高基数列排序行在磁盘上的效果:

图片

由于行按高基数列值排序,通常无法再根据其他列的值进行排序来形成长序列。因此,列文件的压缩比会不理想。

通过新的 optimize_row_order 设置,ClickHouse 自动实现最佳数据压缩。ClickHouse 仍然按 ORDER BY 列排序在磁盘上存储行。此外,在具有相同 ORDER BY 列值的行范围内,按剩余列的值进行排序,这些列按范围内列基数升序排列:

图片

这种优化仅适用于插入时创建的数据部分,不适用于部分合并。由于普通 MergeTree 表的大多数合并仅连接 ORDER BY 键的非重叠范围,因此已优化的行顺序通常会保留。

根据数据特性,预计插入时间将增加 30-50%。

预计 LZ4 或 ZSTD 的压缩率平均会提高 20-40%。

此设置最适用于没有 ORDER BY 键或低基数 ORDER BY 键的表,即仅有少数不同 ORDER BY 键值的表。具有高基数 ORDER BY 键的表,例如 DateTime64 类型的时间戳列,预计不会从此设置中受益。

为了展示这一新优化,我们将 10 亿行公共 PyPI 下载统计数据集加载到一个不使用 optimize_row_order 设置的表和一个使用 optimize_row_order 设置的表中。

我们创建了没有新设置的表:

CREATE OR REPLACE TABLE pypi
(
    `timestamp` DateTime64(6),
    `date` Date MATERIALIZED timestamp,
    `country_code` LowCardinality(String),
    `url` String,
    `project` String,
    `file` Tuple(filename String, project String, version String, type Enum8('bdist_wheel' = 0, 'sdist' = 1, 'bdist_egg' = 2, 'bdist_wininst' = 3, 'bdist_dumb' = 4, 'bdist_msi' = 5, 'bdist_rpm' = 6, 'bdist_dmg' = 7)),
    `installer` Tuple(name LowCardinality(String), version LowCardinality(String)),
    `python` LowCardinality(String),
    `implementation` Tuple(name LowCardinality(String), version LowCardinality(String)),
    `distro` Tuple(name LowCardinality(String), version LowCardinality(String), id LowCardinality(String), libc Tuple(lib Enum8('' = 0, 'glibc' = 1, 'libc' = 2), version LowCardinality(String))),
    `system` Tuple(name L
<think>好的,我需要帮助用户解决如何注册Aspose.Words 24.6版本的问题。首先,我需要回顾用户提供的引用内容,看看是否有相关的注册或配置信息。用户提供了五个引用,其中引用[1]、[2]、[3]提到了Aspose的不同产品,但主要涉及Document处理、Imaging和Diagram,没有直接提到Words的注册方法。引用[4]和[5]是关于Java项目的错误和一篇博客链接,似乎不相关。 接下来,我应该考虑Aspose产品的通用注册流程。通常,Aspose的产品需要设置License,无论是付费版还是试用版。用户需要获取许可证文件(通常是一个.lic文件),然后在代码中加载它。根据Aspose的文档,常见的步骤包括: 1. 创建License对象。 2. 使用SetLicense方法加载许可证文件。 3. 确保许可证文件路径正确,或在代码中嵌入资源。 用户可能需要检查Aspose.Words的官方文档是否有24.6版本的具体说明,但通常注册方法在不同版本间变化不大。需要注意的是,不同产品(如Words、Imaging、Diagram)可能有类似的流程,但具体类名可能不同。例如,Aspose.Words的License类可能在`Aspose.Words.License`命名空间下。 此外,用户可能遇到常见问题,比如许可证未正确加载导致水印或功能限制。这时需要验证许可证是否有效,路径是否正确,或者在部署时是否将许可证文件包含在项目中。 总结步骤: - 获取许可证文件。 - 在代码中引用Aspose.Words库。 - 初始化License对象并设置许可证。 - 处理可能的异常,如文件未找到或许可证无效。 需要确保回答结构清晰,分步骤说明,并提醒用户注意事项,如试用版和正式版的区别,以及部署时的路径问题。</think>### Aspose.Words 24.6 版本注册及License配置教程 #### 步骤 1: 获取License文件 - **付费用户**:从Aspose官方购买后,会收到包含`.lic`文件的授权邮件。 - **试用用户**:可下载试用版,生成临时License(通常功能受限或有水印)。 #### 步骤 2: 在项目中引用Aspose.Words库 确保项目中已通过NuGet或手动引用了`Aspose.Words` 24.6版本的DLL文件。 NuGet安装命令: ```powershell Install-Package Aspose.Words -Version 24.6 ``` #### 步骤 3: 配置License 在代码中初始化License并加载文件(假设文件名为`Aspose.Words.lic`,放置在项目根目录): ```csharp using Aspose.Words; // 创建License对象 License license = new License(); try { // 加载License文件 license.SetLicense("Aspose.Words.lic"); Console.WriteLine("License设置成功"); } catch (Exception ex) { Console.WriteLine("License加载失败: " + ex.Message); } ``` #### 步骤 4: 验证License状态 通过检查`IsLicensed`属性确认是否生效: ```csharp
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值