Giao dịch hoạt động theo cách của SimpleDB của Amazon hoặc một cụm cơ sở dữ liệu bị phân mảnh. Đó là để nói, họ "cuối cùng nhất quán" hơn là đảm bảo phù hợp. Vì vậy, khi bạn đang sử dụng các giao dịch, hàm xử lý có thể được gọi nhiều hơn một lần với một giá trị cục bộ (trong một số trường hợp null nếu nó không bao giờ được truy xuất) và sau đó lại với giá trị được đồng bộ hóa (bất kỳ trên máy chủ).
Ví dụ:
pathRef.transaction(function(curValue) {
// this part is eventually consistent and may be called several times
}, function(error, committed, ss) {
// this part is guaranteed consistent and will match the final value set
});
Đây thực sự là những suy nghĩ mà bạn phải tiếp cận giao dịch anyways. Bạn nên luôn mong đợi nhiều cuộc gọi, vì giao dịch đầu tiên có thể va chạm với một thay đổi khác và bị từ chối. Bạn không thể sử dụng phương thức xử lý của giao dịch để tìm nạp giá trị máy chủ (mặc dù bạn có thể đọc nó ra khỏi cuộc gọi lại thành công).
Ngăn chặn sự kiện kích hoạt tại địa phương
Khi giao dịch xảy ra, một sự kiện địa phương được kích hoạt trước khi nó đạt đến máy chủ cho đền bù độ trễ. Nếu giao dịch không thành công, sự kiện cục bộ sẽ được hoàn nguyên (thay đổi hoặc xóa sự kiện được kích hoạt).
Bạn có thể sử dụng thuộc tính applyLocally
on transactions để ghi đè hành vi này, làm cho kết quả cục bộ chậm hơn nhưng đảm bảo rằng chỉ giá trị máy chủ được kích hoạt cục bộ.
pathRef.transaction(function(curValue) {
// this is still called multiple times
}, function(error, committed, ss) {
// this part is guaranteed consistent and will match the final value set
},
// by providing a third argument of `true`, no local event
// is generated with the locally cached value.
true);
Cảm ơn, tôi đã sử dụng giao dịch gần 3 ngày sau khi dữ liệu được chèn vào. Vì vậy, bạn nói để sử dụng giao dịch đầu tiên chúng ta cần phải kiểm tra vị trí đó cho dù bất kỳ giá trị tồn tại hay không? – Ashok
"Cuối cùng liên tục" không có gì để làm với chiều dài nó được trên máy chủ, chỉ là chiều dài nó đã được trên máy khách - nó không phải trên máy khách cho đến khi bạn yêu cầu nó. Bạn không nhất thiết cần phải kiểm tra xem một giá trị có tồn tại hay không, chỉ cần chấp nhận rằng hàm có thể được gọi nhiều lần và "cuối cùng" sẽ được gọi với giá trị máy chủ. – Kato
@Kato Tôi lấy nó sau đó giao dịch đó sẽ là một điều xấu cho một máy chủ Node để sử dụng để giảm số dư của người dùng?Như một máy chủ nút khác tạo ghi trước, sau đó tôi muốn nó viết cùng một thứ (do đó thiết lập sẽ tốt hơn?) –