Clickhouse中的自定义分区

时间:2019-03-07 06:20:47

标签: olap opentsdb clickhouse

我对Clickhouse中的自定义分区有几个疑问。背景:我正在尝试在Clickhouse上构建TSDB。我们需要支持非常大的批处理写入和复杂的OLAP读取。

  1. 假设我们按月使用标准分区,并且我们的Clickhouse集群中有20个节点。我想知道同一个月的数据会全部流到同一节点还是Clickhouse做一些内部平衡并将同一月份的数据放到几个节点?

  2. 如果来自同一月份的所有数据都写入同一节点,那么这对于我们的情况将非常不利。我可能会考虑使用(时间戳,标签)进行修补,其中标签是定义数据源的不同标签。我们的监控系统将每30秒将数据写入TSDB。我们的读取模式通常是单个表范围扫描或在一个列上连接多个表。关于如何自定义分区策略的任何建议?

  3. 由于clickhouse不支持二级索引,因此我们将在列上运行选择查询,我认为我应该将那些重要的列放入主键中,因此我的主键可能类似于(时间戳,ip,端口...),关于此设计的任何建议或充分说明clickhouse不支持其他索引(例如其他非主列上的位图索引)的次级索引的原因?

1 个答案:

答案 0 :(得分:0)

  1. 在ClickHouse中,分区和分片是两个独立的机制。按月分区意味着来自不同月份的数据将永远不会合并存储在文件系统中的同一文件中,并且与节点之间的数据放置无关(这取决于选择如何精确设置表并运行INSERT INTO查询) )。
  2. 按月或数周进行分区通常效果很好,有关选择主键的信息,请参见官方文档:https://clickhouse.yandex/docs/en/operations/table_engines/mergetree/#selecting-the-primary-key
  3. 添加这些元素没有基本问题,例如,bloom筛选器索引开发正在进行中:https://github.com/yandex/ClickHouse/pull/4499