シャーディングを使用して、複数のデータベースサーバー間で信頼性の高いトランザクションを維持するにはどうすればよいですか?
たとえば、AccountLedger
あるデータベースサーバー(MySQLインスタンス)で名前が付けられたテーブルとUser
別のデータベースサーバーで名前が付けられたテーブルがある場合、両方のデータベースインスタンス間でトランザクションを実行して、両方とも確実にコミットするか、失敗時にロールバックすることができますか?
トランザクションの例:
AccountLedgerデータベースサーバー:
START TRANSACTION;
INSERT INTO AccountLedger SET
UserID = @UserID,
Date = @Date,
Debit = @Debit,
Balance = @Balance;
ユーザーデータベースサーバー:
START TRANSACTION;
UPDATE User SET
Balance = @Balance
WHERE UserID = @UserID;
AccountLedgerデータベースサーバー:
COMMIT;
ユーザーデータベースサーバー:
COMMIT; -- What happens if the COMMIT fails here (power goes out or whatever)
シャーディングについてはかなり読んだことがありますが、シャーディングでのトランザクションの使用に関する情報が見つからないようです。誰かが私を正しい方向に向けることができますか?