2010-11-18 30 views
15

Bài viết trên Wikipedia cho Distributed transaction không phải là rất hữu ích."Giao dịch được phân phối" là gì?

Bạn có thể mô tả cấp cao về giao dịch được phân phối không?

Ngoài ra, bạn có thể đưa ra ví dụ về lý do tại sao một ứng dụng hoặc cơ sở dữ liệu nên thực hiện một giao dịch cập nhật dữ liệu trên hai hoặc nhiều máy tính nối mạng? Tôi hiểu ví dụ về ngân hàng cổ điển; Tôi quan tâm nhiều hơn đến các giao dịch phân tán trong các cơ sở dữ liệu quy mô Web như Dynamo, Bigtable, HBase, hoặc Cassandra.

+0

Bạn có hiểu giao dịch ("bình thường") là gì không? –

+1

'@Matt Ball:' Yessir! Câu hỏi này là về các giao dịch * phân phối *. – Zombie

Trả lời

10

Giao dịch phân tán trải rộng trên nhiều hệ thống vật lý, trong khi giao dịch chuẩn thì không. Việc đồng bộ hóa giữa các hệ thống trở thành một nhu cầu mà theo truyền thống sẽ không tồn tại trong một giao dịch chuẩn.

Từ tài liệu tham khảo Wikipedia của bạn ...

... một giao dịch phân phối có thể được coi là một giao dịch cơ sở dữ liệu phải đồng bộ (hoặc cung cấp ACID tài sản) giữa nhiều cơ sở dữ liệu tham gia mà được phân phối trong số các địa điểm vật lý khác nhau ...

+0

+1 cho báo giá. Với tôi, ACID hoàn toàn là một định nghĩa. – Dunaril

4

Giao dịch phân phối là giao dịch hoạt động trên nhiều uters. Giả sử bạn bắt đầu một giao dịch trong một số phương thức trong chương trình trên máy tính A. Sau đó bạn thực hiện một số thay đổi đối với dữ liệu trong phương thức trên máy tính A và sau đó phương thức gọi một dịch vụ web trên máy tính B. Phương thức dịch vụ web trên máy tính B không thành công và cuộn lại giao dịch. Vì giao dịch được phân phối, điều này có nghĩa là mọi thay đổi được thực hiện trên máy tính A cũng cần được khôi phục. Sự kết hợp của điều phối viên giao dịch phân tán trên các cửa sổ và khung .net tạo điều kiện thuận lợi cho chức năng này.

19

Thông thường, các giao dịch xảy ra trên một máy chủ cơ sở dữ liệu:

BEGIN TRANSACTION 
SELECT something FROM myTable 
UPDATE something IN myTable 
COMMIT 

Một phân phối giao dịch bao gồm nhiều máy chủ:

BEGIN TRANSACTION 
UPDATE amount = amount - 100 IN bankAccounts WHERE accountNr = 1 
UPDATE amount = amount + 100 IN someRemoteDatabaseAtSomeOtherBank.bankAccounts WHERE accountNr = 2 
COMMIT 

Khó khăn xuất phát từ thực tế rằng các máy chủ phải giao để đảm bảo rằng các thuộc tính giao dịch như nguyên tử được thỏa mãn trên cả hai máy chủ: Nếu giao dịch thành công, các giá trị phải được cập nhật trên cả hai máy chủ. Nếu giao dịch thất bại, giao dịch phải được khôi phục trên cả hai máy chủ. Nó không bao giờ phải xảy ra rằng các giá trị được cập nhật trên một máy chủ nhưng không được cập nhật trên một máy chủ khác.

1

Giao dịch phân phối là giao dịch trên cơ sở dữ liệu được phân phối (nghĩa là dữ liệu được lưu trữ trên một số hệ thống riêng biệt về mặt vật lý). Đáng chú ý vì có một số lượng phức tạp phức tạp liên quan (đặc biệt là trong giao tiếp) để đảm bảo rằng tất cả các máy vẫn còn trong thỏa thuận, do đó, hoặc toàn bộ giao dịch thành công, hoặc người nào khác có vẻ như không có gì xảy ra cả.

0

Tôi đã tryed để mô tả chi tiết giao dịch phân tán trong bài viết này How would you tune Distributed (XA) transaction for performance?

dữ liệu tốt cho giao dịch phân phối là dữ liệu mà có yêu cầu rất cao về Sự nhất quán. Thường thì đây là tiền hay thứ gì khác mà chúng ta không bao giờ có thể có dữ liệu cũ.Thông thường tôi xác định hai loại Dữ liệu trực tiếp và dữ liệu mà không có nhu cầu cần thiết cho tính chính xác/nhất quán.

Bây giờ phần thứ hai của câu hỏi về Dynamo, Bigtable, HBase hoặc Cassandra.

Bạn không thể vẽ một phần song song giữa các cơ sở dữ liệu NOSQL và các giao dịch được phân phối. Sự tồn tại của lớp cơ sở dữ liệu này là hợp lý như một phương tiện để tránh các giao dịch phân tán. Giao dịch phân tán tập trung xung quanh tính nhất quán. Đó là khá oposite với kho NOSQL được tập trung xung quanh sẵn có và phân vùng.

Mô hình giao dịch thông thường được sử dụng trong các cơ sở dữ liệu như vậy là Sự nhất quán cuối cùng.

+0

@Mogsdad giờ có tốt hơn không? –

Các vấn đề liên quan