ClickHouse中的多租户



很多人不想只使用ClickHouse为他们的公司或项目进行分析。他们希望将其作为SaaS数据/分析项目的骨干。大多数情况下,这需要支持半结构化的json数据,这可能会导致为每个用户创建大量列。

现在,一些经验丰富的ClickHouse用户表示,更少的表意味着更高的性能。因此,为每个用户提供一个单独的表并不是一种选择。

此外,将太多用户的数据放入同一数据库将导致大量的列,一些实验表明,这可能会使CH没有响应。

那么,每个数据库有20个用户,每个用户只能有50列,这又如何呢。但如果你有成千上万的用户呢?是否应该创建数千个数据库?

这个问题的最佳解决方案是什么?

注意:在我们的案例中,数据隔离不是一个问题,我们正在应用程序级别解决它。

单个数据库中的1000个表与具有单个表的1000个数据库之间没有区别。

1000个表和具有*1000个分区的表partition by (tenant_id, .some_expression_from_datetime.)之间几乎没有区别

该问题存在于MergeTree和ReplicatedMergeTree引擎的开销中。并且是您需要创建/读取的文件数量(与文件无关的数据位置问题,在没有文件系统的情况下也是一样的(。

如果您有1000个租户,唯一的方法是使用行策略或应用程序级别的order by (tenant_id,..)+限制。

我有一次与拥有700个Replicated表的客户打交道的经验——复制时经常出现混乱,需要调整后台池,Zookeeper的问题(巨大的DB大小,CH和ZK之间巨大的网络流量(。Clickhouse启动4个小时,因为它需要从所有1000000个部分读取元数据。分区修剪的工作速度较慢,因为它在每个查询的查询分析过程中遍历所有部分。

问题的来源是最初的设计,我想他们在metrika有大约3张桌子。

举个例子https://github.com/ClickHouse/ClickHouse/issues/31919

相关内容

  • 没有找到相关文章

最新更新