2013-07-04 44 views
9

Trong Google App Engine, cách ly giao dịch được cho là cách ly SNAPSHOT, nơi bạn không thấy các lần xóa trước đó hoặc đặt trong chính giao dịch đó, nhưng chỉ trạng thái của kho dữ liệu khi giao dịch bắt đầu (https://developers.google.com/appengine/docs/python/datastore/transactions). Trong một bài báo cũ, nó nói rằng mức giao dịch thực sự là SERIALIZABLE (https://developers.google.com/appengine/articles/transaction_isolation).Cách ly giao dịch trong công cụ ứng dụng google

Bộ tương thích thử nghiệm của Google (TCK) cho thấy rằng nó thực sự là cách ly SNAPSHOT, nhưng trong bài nói trên, nó nói "Mặt khác, giao dịch bên trong là SNAPSHOT", với tùy chọn thay đổi thành SERIALIZABLE ".

Câu hỏi của tôi là, làm cách nào để cho phép mức cách ly trở thành SERIALIZABLE?

+1

câu hỏi hay, thậm chí không có tài liệu –

+0

Nội dung nào đó không được ghi trong tài liệu GAE? Gây sốc. Ít nhất nếu một thành viên trong nhóm GAE trả lời câu hỏi ở đây, một người nào đó sẽ có thể tìm thấy câu hỏi đó với tìm kiếm của Google. –

+0

@RomanLevin Tôi không thấy nó gây sốc ở tất cả ... btw liên kết Tham chiếu API kho dữ liệu từ câu trả lời được chấp nhận ngừng hoạt động (không gây sốc) – themihai

Trả lời

3

Bạn có thể xem cách thay đổi mức cách ly trong BeginTransaction API Reference. Hiện tại, cấu hình này chỉ có thể định cấu hình trong API HTTP của Google Cloud Datastore và mặc định là SERIALIZABLE cho tất cả các SDK App Engine. Tuy nhiên tôi không nghĩ rằng điều này sẽ làm những gì bạn muốn nó làm.

SNAPSHOT vs SERIALIZABLE kiểm soát cách ly giao dịch hoặc cách các giao dịch đồng thời tương tác với nhau. Nó không kiểm soát cách một giao dịch tương tác với chính nó (mặc dù trong một số hệ thống hai điều này được xắp xếp).

Trong kho dữ liệu, thiết lập SERIALIZABLE sẽ không làm cho nó như vậy một giao dịch sẽ thấy đột biến không cam kết của riêng mình. Nó chỉ có nghĩa là các giao dịch đồng thời sẽ va chạm nếu các mẫu đọc và ghi của chúng không hợp lệ khi được tuần tự hóa. Ví dụ, hai giao dịch sau đây sẽ nhất thiết phải va chạm khi sử dụng cách ly SERIALIZABLE:

TX1: READ A, WRITE B' 
TX2: READ B, WRITE A' 

Như không ai trong số hai orderings đây là những khả năng:

READ A, WRITE B', READ B (conflict), WRITE A' 
READ B, WRITE A', READ A (conflict), WRITE B' 

Tuy nhiên, các giao dịch này sẽ không nhất thiết phải va chạm với cô lập SNAPSHOT.

Cả SNAPSHOT và SERIALIZABLE đọc từ 'ảnh chụp nhanh' của dữ liệu, như thể dữ liệu được thay đổi theo cách xung đột với bảo đảm cách ly giao dịch trong khi giao dịch đang chạy, giao dịch không thể được cam kết.

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