YugabyteDB 会自动处理分区(或平板电脑)倾斜吗?

Does YugabyteDB automatically handle partition(or tablet) skew?

[用户在 YugabyteDB Community Slack 上发布的问题]

在我知道散列会扭曲数据的情况下。 想象一个 Messenger 应用程序(实际上是我的情况),它有几个大约 100,000 名成员的大型聊天组,而其他聊天室的成员不到 1000 人。如果我把 chatid 作为存储消息的分区键,它会导致分区倾斜,因为一个大的组会产生更多的消息。 YugabyteDB是否支持自动拆分?

为了使用主键将数据存储在 table 中,我们使用 HASH 作为默认索引类型并以这种方式存储数据。这强制执行唯一值,并且不同的值通过散列分布在分片上。

如果你不使用chatid作为主键,存储大量相同的值,一个比别人大的数,那么那个数就会比别人大。如果您选择它作为分区键,这将采用相同的分区,因此不会是偶数。

是的,这会扭曲 HASH 分片中的 tablet 大小。但是 tablet/partition 在开始成为瓶颈之前可以增长到 ~15GB。如果您不希望聊天室拥有超过 15GB 的数据,那么即使使用 HASH 分片也应该没问题。

如果您想使用 RANGE 分片,那么您必须确保 chatid 不是序列或自动递增数字,因为这会导致所有新聊天室以 1 tablet,从而成为热点。

自动拆分在 master 中可用,但尚未准备好用于生产:https://docs.yugabyte.com/latest/architecture/docdb-sharding/tablet-splitting/