2012-11-19 37 views
8

Tôi đang trong quá trình di chuyển một ứng dụng từ Master/Slave sang HRD. Tôi muốn nghe một số nhận xét từ những người đã trải qua quá trình di chuyển.Trong thực tế, làm thế nào cuối cùng là "sự nhất quán cuối cùng" trong HRD?

  1. Tôi đã thử một ví dụ đơn giản chỉ cần đăng một thực thể mới không có tổ tiên và chuyển hướng đến một trang để liệt kê tất cả các thực thể từ mô hình đó. Tôi đã thử nó nhiều lần và nó luôn luôn nhất quán. Chúng tôi đặt 500 thuộc tính được lập chỉ mục và một lần nữa, luôn nhất quán ...

  2. Tôi cũng lo lắng về một giới hạn của 1 lần đặt() cho mỗi nhóm thực thể mỗi giây. Tôi đặt() 30 thực thể với cùng một tổ tiên (cùng một yêu cầu HTTP nhưng đặt() từng cái một) và về cơ bản không có sự khác biệt khi đặt 30 thực thể không có tổ tiên. (Tôi đang sử dụng NDB, có thể nó được làm một số loại tối ưu hóa?)

Tôi đã thử nghiệm điều này với một ứng dụng có sản phẩm nào mà không cần bất kỳ giao thông và tôi tự hỏi bao nhiêu một giao thông thực tế sẽ ảnh hưởng đến "nhất cuối cùng".

Tôi biết rằng tôi có thể kiểm tra "tính nhất quán cuối cùng" về phát triển địa phương. Câu hỏi của tôi là:

Tôi có thực sự cần phải cơ cấu lại ứng dụng của mình để xử lý tính nhất quán cuối cùng không?

Hoặc nó sẽ được chấp nhận để để nó theo cách đó là vì sự nhất quán cuối cùng thực sự phù hợp trong thực tế cho 99%?

+0

Bạn đã liệt kê tất cả các thực thể dưới 1.? –

+1

Ứng dụng của bạn làm gì? Liệu các tác động tiêu cực có thể nhìn thấy nếu viết của bạn cuối cùng có nhất quán không? –

+0

ndb có thể thực hiện tự động phân đoạn đặt hàng của bạn, xem https://code.google.com/p/appengine-ndb-experiment/source/browse/ndb/context.py#703 – proppy

Trả lời

1

Nếu bạn có một ứng dụng nhỏ thì dữ liệu của bạn có thể nằm trên cùng một phần của cùng một đĩa và bạn có một phiên bản. Bạn có thể sẽ không nhận thấy sự nhất quán cuối cùng. Khi ứng dụng của bạn phát triển, bạn nhận thấy nó nhiều hơn. Thông thường phải mất một phần nghìn giây để đạt được tính nhất quán, nhưng tôi đã thấy các trường hợp mất từ ​​một giờ trở lên.

Nói chung, truy vấn là nơi bạn chú ý nhất. Một cách để giảm tác động là chỉ truy vấn bằng các khóa và sau đó sử dụng ndb.get_multi() để tải các thực thể.Tìm nạp các thực thể bằng các khóa đảm bảo rằng bạn nhận được phiên bản mới nhất của thực thể đó. Tuy nhiên, nó không đảm bảo rằng danh sách khóa là phù hợp nhất quán. Vì vậy, bạn có thể nhận được các thực thể không phù hợp với điều kiện truy vấn, do đó, lặp qua các thực thể và bỏ qua các thực thể không khớp.

Từ những gì tôi đã nhận thấy, nỗi đau của sự nhất quán cuối cùng tăng dần khi ứng dụng của bạn phát triển. Tại một số điểm bạn cần phải nghiêm túc và cập nhật các lĩnh vực quan trọng của mã của bạn để xử lý nó.

0

Trường hợp xấu nhất nếu bạn nhận được kết quả không phù hợp là gì?

  • Người dùng có thấy một số thông tin không quan trọng đã cũ? Đó có lẽ là ok.

  • Bạn sẽ tính toán một cái gì đó quan trọng, như giá của một cái gì đó? Hoặc số lượng các sản phẩm trong kho trong một cửa hàng? Trong trường hợp đó, bạn sẽ muốn tránh xảy ra cơ hội đó.

Từ chỉ quan sát, có vẻ như kết quả cuối cùng nhất quán hiển thị nhiều hơn khi tập dữ liệu của bạn lớn hơn, tôi nghi ngờ khi dữ liệu của bạn được chia thành nhiều máy tính bảng hơn.

Ngoài ra, nếu bạn đang đọc các thực thể của mình với các yêu cầu get() bằng khóa/id, nó sẽ luôn luôn nhất quán. Đảm bảo bạn đang thực hiện truy vấn để nhận được kết quả nhất quán.

0

Tốc độ sao chép sẽ chủ yếu phụ thuộc vào máy chủ. Thông thường trên một hệ thống không tải, độ trễ sao chép sẽ là mili giây.

Nhưng ý tưởng "cuối cùng nhất quán" là bạn cần viết ứng dụng của mình để bạn không dựa vào đó; bất kỳ sự chậm trễ nhân rộng nào cần được cho phép trong các ràng buộc của ứng dụng của bạn.

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