Tôi chỉ đi qua đoạn sau đây trong AppEngine documentation for Query Cursors:Google AppEngine máy chủ dụ đồng hồ đồng bộ
Một ứng dụng thú vị của con trỏ là để giám sát các đơn vị cho thay đổi không nhìn thấy. Nếu ứng dụng đặt thuộc tính dấu thời gian có ngày hiện tại mỗi khi thực thể thay đổi, ứng dụng có thể sử dụng truy vấn được sắp xếp theo thuộc tính dấu thời gian, tăng dần, với con trỏ Datastore để kiểm tra thời điểm các thực thể được chuyển đến cuối danh sách kết quả. Nếu dấu thời gian của một đối tượng là được cập nhật, truy vấn có con trỏ trả về thực thể được cập nhật . Nếu không có thực thể nào được cập nhật kể từ lần cuối cùng, truy vấn được thực hiện, không có kết quả nào được trả về và con trỏ không di chuyển .
Để làm việc này đáng tin cậy, sẽ phải có một số loại bảo đảm về đồng bộ hóa đồng hồ trên các phiên bản máy chủ khác nhau. Nếu không, bạn có thể nhận được các tình huống sau:
- Server dụ 1 (đồng hồ nhanh) giúp tiết kiệm một bản cập nhật với thời gian tem 1000.
- Khách hàng yêu cầu cập nhật và tìm thấy một bản cập nhật này.
- Trường hợp máy chủ 2 (đồng hồ chậm) lưu bản cập nhật khác có dấu thời gian 950.
- Khách hàng yêu cầu cập nhật và KHÔNG tìm thấy bản cập nhật này khi dấu thời gian không tăng.
Theo như tôi hiểu, không bao giờ có bất kỳ đồng bộ hóa đồng bộ nào như vậy đảm bảo. Đã thay đổi này ???
Cập nhật:
Tôi chỉ nhận ra rằng ngay cả khi đồng hồ đã được sync'ed hoàn hảo, phương pháp này có thể bỏ lỡ kết quả do sự thống nhất cuối cùng của câu truy vấn. Nếu một bản cập nhật sau đó kết thúc bằng việc cam kết trước một bản cập nhật trước đó và làm cho nó thành một truy vấn đồng thời trong khi bản cập nhật trước đó không, nó sẽ ẩn bản cập nhật trước đó. Hay tôi đang thiếu một cái gì đó?
Tôi chưa bao giờ tìm thấy tuyên bố chính thức về đồng bộ hóa đồng hồ. trên IRC với google folks họ nói công cụ đã được đồng bộ hóa và tôi tin rằng nó tuy nhiên bài đăng này từ một anh chàng google có lẽ là một dấu hiệu tốt về trạng thái chơi https://groups.google.com/forum/#!searchin/google-appengine/đồng hồ $ 20sync/google-appengine/XKLp5Uehhr8/MlsdgGwOB-wJ. Cá nhân trong những ngày đầu của appengine tôi đã nhìn thấy skews đồng hồ giữa các trường hợp> 30 giây. Thời gian qua tôi đã kiểm tra tôi không thể tìm thấy bất kỳ skew đáng kể ;-) –
Đây thực sự chỉ là một ví dụ xấu trên các tài liệu vì có rất nhiều trường hợp cạnh lo lắng về (như bạn đã đề cập). Ngay cả với đồng bộ hóa đồng hồ hoàn hảo và tính nhất quán mạnh mẽ, hãy đặt trường dấu thời gian thành hiện tại() và khi một thứ gì đó được gửi đến kho dữ liệu có thể bị trì hoãn. –