基于时间戳的分片

时间:2021-03-10 19:12:24

标签: mysql sharding distributed-system

为什么不推荐基于时间戳或单调递增数的数据库分片? 我指的是在以下位置提到的反模式:https://cloud.google.com/spanner/docs/whitepapers/optimizing-schema-design#anti-pattern_timestamp_ordering

1 个答案:

答案 0 :(得分:1)

请注意,您的链接称其为“反模式”。我也有类似的想法...

这似乎是一种奇怪的分片方式。这意味着写入将在一台服务器上冲击一段时间(一天,或任何分片范围)。由于所有写入都在进行,这使得“最近的”数据难以SELECT。同时,“旧”数据闲置??

通常,分片基于“user_id”或“company_id”。这将负载(读取和写入)分布在分片上。毕竟,分片是为了分散负载。

但是,除非您有太多的活动,以至于无法在一台机器上处理流量,否则不应进行分片。分片很复杂,因为必须将流量重定向到适当的机器,而且如果单个操作需要查看多个分片,则需要非常混乱的代码。

如果您的流量很大,我很乐意为您提供进一步的建议。但我会先看看流量是否可以变得足够高效以在单个服务器上运行。

另一件需要注意的事情:MySQL 中基本上没有并行性。