Với sharding, làm thế nào bạn có thể duy trì một giao dịch đáng tin cậy trên nhiều máy chủ cơ sở dữ liệu? Ví dụ, nếu tôi có một bảng tên là AccountLedger
trên một máy chủ cơ sở dữ liệu (MySQL instance) và một bảng có tên User
trên máy chủ cơ sở dữ liệu khác, có thể chạy một giao dịch trên cả hai trường hợp cơ sở dữ liệu. rollback về thất bại?Sharding and Transactions với MySQL
Ví dụ giao dịch:
máy chủ cơ sở dữ liệu AccountLedger:
START TRANSACTION;
INSERT INTO AccountLedger SET
UserID = @UserID,
Date = @Date,
Debit = @Debit,
Balance = @Balance;
máy chủ cơ sở dữ liệu tài khoản: máy chủ cơ sở dữ liệu
START TRANSACTION;
UPDATE User SET
Balance = @Balance
WHERE UserID = @UserID;
AccountLedger:
COMMIT;
tài máy chủ cơ sở dữ liệu:
COMMIT; -- What happens if the COMMIT fails here (power goes out or whatever)
Tôi đã đọc rất nhiều về sharding, nhưng tôi dường như không tìm thấy bất kỳ thông tin nào về việc sử dụng giao dịch với sharding. Ai đó có thể chỉ cho tôi đi đúng hướng?