我有一个带有自动递增 BIGINT 唯一主键的假设表。如果我选择对表进行分片,主键 BIGINT 会发生什么?分片是否允许超过 BIGINT 的容量?分片是否可以防止重复键出现?
提前致谢...
据我了解,NDB 存储引擎分片基于第一个主键列的模数超过分片数。它这样做是为了确定在哪个节点上存储该行,并且当您的查询请求一行时,它也确定从哪个节点读取。
这意味着您不能在多个分片上存在相同的主键值。换句话说,BIGINT 中的值范围在分片之间进行划分。
所以不,您不会超出 BIGINT 中的值范围。虽然我质疑你为什么还要问,因为 BIGINT 真的非常大,而且你不可能用尽 BIGINT,除非你每行跳过几十亿个 id 值。
是的,将值映射到节点意味着可以在每个节点上进行唯一的密钥检查。但是,在使用复制时需要注意这一点。阅读https://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-replication-issues.html