基于时间戳的分片
Sharding based on timestamp
为什么不推荐基于时间戳或单调递增数的数据库分片?
我指的是提到的反模式:https://cloud.google.com/spanner/docs/whitepapers/optimizing-schema-design#anti-pattern_timestamp_ordering
请注意,您的 link 称其为“反模式”。我也有类似的想法...
这似乎是一种奇怪的分片方式。这意味着写入将在一台服务器上冲击一段时间(一天,或任何分片范围)。这使得“最近”的数据很难 SELECT
因为所有的写入都在进行。同时,“旧”数据处于闲置状态??
通常,分片是基于“user_id”或“company_id”。这将负载(读取和写入)分散到各个分片上。毕竟分片是为了分散负载。
但是,在您拥有如此多 activity 以至于单台机器无法处理流量之前,不应进行分片。分片很复杂,因为必须将流量重定向到适当的机器,并且如果单个操作需要查看多个分片,则需要非常混乱的代码。
如果您确实有很多流量,我很乐意提供进一步的建议。但我会先看看是否可以使流量足够高效以在单个服务器上运行。
另一件需要注意的事情:MySQL.
中基本上没有并行性
为什么不推荐基于时间戳或单调递增数的数据库分片? 我指的是提到的反模式:https://cloud.google.com/spanner/docs/whitepapers/optimizing-schema-design#anti-pattern_timestamp_ordering
请注意,您的 link 称其为“反模式”。我也有类似的想法...
这似乎是一种奇怪的分片方式。这意味着写入将在一台服务器上冲击一段时间(一天,或任何分片范围)。这使得“最近”的数据很难 SELECT
因为所有的写入都在进行。同时,“旧”数据处于闲置状态??
通常,分片是基于“user_id”或“company_id”。这将负载(读取和写入)分散到各个分片上。毕竟分片是为了分散负载。
但是,在您拥有如此多 activity 以至于单台机器无法处理流量之前,不应进行分片。分片很复杂,因为必须将流量重定向到适当的机器,并且如果单个操作需要查看多个分片,则需要非常混乱的代码。
如果您确实有很多流量,我很乐意提供进一步的建议。但我会先看看是否可以使流量足够高效以在单个服务器上运行。
另一件需要注意的事情:MySQL.
中基本上没有并行性