自動インクリメント BIGINT の一意の主キーを持つ架空のテーブルがあります。テーブルを分割することを選択した場合、主キー BIGINT はどうなりますか? シャーディングは BIGINT の容量を超えることを許可しますか? シャーディングは、重複したキーが表示されるのを防ぐために何かをしますか?
前もって感謝します...
私が理解しているように、NDB ストレージ エンジンは、シャードの数に対する最初の主キー列のモジュラスに基づいてシャードします。これにより、行を格納するノードが決定論的になり、クエリが行を要求したときにどのノードから読み取るかが決定論的になります。
つまり、複数のシャードに同じ主キー値を存在させることはできません。つまり、BIGINT の値の範囲はシャード間で分割されます。
いいえ、BIGINT の値の範囲を超えることはできません。BIGINT は非常に大きく、行ごとに数十億の id 値をスキップしない限り、BIGINT を使い果たす可能性は低いため、なぜ質問する必要があるのか疑問に思います。
はい、ノードへの値のマッピングは、各ノードで一意のキー チェックを実行できることを意味します。ただし、レプリケーションを使用する場合は注意が必要です。https://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-replication-issues.htmlを読む