我对clickhouse中的自定义分区有几个问题。背景:我正在尝试在clickhouse上构建一个tsdb。我们需要支持非常大的批量写入和复杂的olap读取。
假设我们按月使用标准分区,在clickhouse集群中有20个节点。我在想,同一个月的数据会流到同一个节点吗?还是clickhouse会做一些内部平衡,把同一个月的数据放到几个节点上?
如果来自同一个月的所有数据都写入同一个节点,那么对我们的场景将非常不利。我可能会考虑patitionby(timestamp,tags),其中tags是定义数据源的不同标记。我们的监控系统每30秒将数据写入tsdb。我们的读取模式通常是单表范围扫描或一列上的多个表连接。关于如何定制分区策略有什么建议吗?
由于clickhouse不支持二级索引,我们将对列运行选择查询,因此我认为应该将那些重要的列放入主键中,因此我的主键可能是(timestamp,ip,port…),关于这个设计或make有什么建议可以给出一个很好的理由来解释为什么clickhouse不支持二级索引,比如其他非主列上的位图索引?
1条答案
按热度按时间kg7wmglp1#
在clickhouse中,分区和分片是两种独立的机制。按月分区意味着不同月份的数据永远不会合并到文件系统上的同一个文件中,而与节点之间的数据放置无关(这是通过选择如何准确地设置表和运行insert-into查询来控制的)。
按几个月或几周进行分区通常可以,有关选择主键的信息,请参阅官方文档:https://clickhouse.yandex/docs/en/operations/table_engines/mergetree/#selecting-主键
添加这些没有任何基本问题,例如正在开发布卢姆过滤器索引:https://github.com/yandex/clickhouse/pull/4499