【问题标题】:custom partition in clickhouseClickhouse 中的自定义分区
【发布时间】:2019-07-28 22:53:28
【问题描述】:

我有几个关于 clickhouse 中的自定义分区的问题。背景:我正在尝试在 clickhouse 之上构建一个 TSDB。我们需要支持非常大的批量写入和复杂的 OLAP 读取。

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

  2. 如果同一个月的所有数据都写入同一个节点,那么这对我们的场景来说将是非常糟糕的。我可能会考虑 patition by (timestamp, tags),其中标签是定义数据源的不同标签。我们的监控系统会每 30 秒将数据写入 TSDB。我们的读取模式通常是单表范围扫描或多个表连接在一个列上。关于我应该如何自定义分区策略的任何建议?

  3. 由于clickhouse不支持二级索引,我们会在列上运行选择查询,我认为我应该把那些重要的列放到主键中,所以我的主键可能会像(时间戳,ip,端口...),有关此设计的任何建议或制作说明为什么 clickhouse 不支持其他非主列上的位图索引之类的二级索引?

【问题讨论】:

  • 有人在这里提供有关 click-house 分片的提示吗?
  • 集群中的数据位置取决于集群配置和分布式表引擎中的分片键。答案还取决于用于写入数据的方法——直接在每个分片上或通过分布式表中的 INSERT。有关更多信息,请参阅文档clickhouse.yandex/docs/en/operations/table_engines/distributed。 PS:最好将这些问题发送到 Telegram 中的 Clickhouse 频道(t.me/clickhouse_en)。有更多机会直接从 CH 开发人员那里获得有关 CH 设计决策的答案。

标签: olap opentsdb clickhouse


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-17
    • 2018-05-10
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多