clickhouse中分区的实际用途是什么?

Nik*_*T R 3 clickhouse

它表示,分区使删除或移动数据变得更容易,因此仅对有限的数据造成影响。在各种博客中,建议使用月份作为分区键 ( toYYYYMM(date))。在许多地方,还建议不要有超过几个分区。我使用 clickhouse 作为数据库来存储不会频繁删除的时间序列数据。对于大量时间序列数据,建议的分区键是什么?如果我不想频繁删除,是否必须有一个?

在生产中,我注意到启动非常慢,我怀疑分区太多是罪魁祸首。因此,我决定通过从另一个表中选择数据(这样就没有机会优化表)来将新鲜的时间序列数据插入到表中(为大约 200 亿行创建了超过 2300 个分区)进行测试。我立即删除了原来的表并尝试重新启动。很快就10秒左右就完成了。这与我在生产中观察到的 800GB+ 数据完全相反(有许多数据库和表,而不是我的测试节点只有一个表)。

编辑:正如所指出的,我混淆了零件和分区。关于clickhouse的启动时间受到影响,我最好再发一个问题。

小智 6

这是一个非常常见的问题,为了披露,我在 ClickHouse 工作。

正如您所指出的,当您拥有时间序列数据时,分区特别有用。在确定分区数量时,我们通常会推荐一些准则:

分区的使用应该由几个关于为什么使用它们的问题来确定:

  • 您通常只查询单个分区吗?例如,如果您的查询通常是针对一天或一个月内的结果,则在该时间段内进行分区可能是有意义的
  • 您是否想要对数据进行“分层”或设置 TTL,以便一旦分区达到 X 的年龄(例如 91 天、7 个月),您想对其执行一些特殊操作?(例如,TTL 到较低成本层存储、从 ClickHouse 备份和删除等)
  • 我们通常建议将分区数量保持在 100 左右以下。最多 1000 个分区也可以,但这不是最佳选择,并且会对文件系统和索引/内存大小产生一些性能影响,从而影响启动时间、插入/查询时间

鉴于这些指南,希望对您的问题有所帮助。按日或按月分区可能是最常见的,但由于 ClickHouse 可以非常轻松地管理大型表,因此可能希望尽可能减少分区 - 按月分区可能是最常见的。

我不完全理解你的测试结果,所以请随意扩展。2300 个分区听起来太多了,但可能可行,只是会对性能产生一些影响。减少分区数量(从而增加分区大小)似乎是一个不错的建议。