在 Clickhouse 中选择分片键的最佳方法是什么?
what is the best way to chose shard key in clickhouse?
我想了解如何在 Clickhosue 中选择分片键?以及 clickhosue 如何选择哪个分片?
例如,我有一个包含 3 列的 table:
user_id,
时间戳,
city_id.
我应该按 user_id 还是按城市分片?
我使用 murmurHash3_64 函数。
murmurHash3_64(city_id = 1) return :
┌──murmurHash3_64(1)─┐
│ 956517343494314387 │
└────────────────────┘
当我有 3 个分片或 2 个分片时,Clickhouse 中选择分片 ID 的机制是什么?
https://clickhouse.tech/docs/en/engines/table-engines/special/distributed/
首先你需要理解为什么你需要按一些有意义的列进行分片。为什么你不能使用 rand()
?
通常使用什么不是问题,因为分片自然要遵循业务需求。如果您没有这样的要求,那么您应该使用 rand()
.
CH使用模运算+权重。
这很简单。如果你有 6 个分片,那么 956517343494314387 % 6 = 5 === 分片编号 5。因此具有相同 city_id 的行将放在同一个分片上。
因此,如果您选择 city_id 作为分片键,并且城市的分布通常是不平等的,那么阴影也会不平等。
纽约或墨西哥等大城市的所有行都将在一个分片中。
所以 user_id 看起来更适合作为分片键。
我想了解如何在 Clickhosue 中选择分片键?以及 clickhosue 如何选择哪个分片? 例如,我有一个包含 3 列的 table: user_id, 时间戳, city_id.
我应该按 user_id 还是按城市分片?
我使用 murmurHash3_64 函数。
murmurHash3_64(city_id = 1) return :
┌──murmurHash3_64(1)─┐
│ 956517343494314387 │
└────────────────────┘
当我有 3 个分片或 2 个分片时,Clickhouse 中选择分片 ID 的机制是什么?
https://clickhouse.tech/docs/en/engines/table-engines/special/distributed/
首先你需要理解为什么你需要按一些有意义的列进行分片。为什么你不能使用 rand()
?
通常使用什么不是问题,因为分片自然要遵循业务需求。如果您没有这样的要求,那么您应该使用 rand()
.
CH使用模运算+权重。 这很简单。如果你有 6 个分片,那么 956517343494314387 % 6 = 5 === 分片编号 5。因此具有相同 city_id 的行将放在同一个分片上。
因此,如果您选择 city_id 作为分片键,并且城市的分布通常是不平等的,那么阴影也会不平等。 纽约或墨西哥等大城市的所有行都将在一个分片中。
所以 user_id 看起来更适合作为分片键。