2012-09-24 17 views
5

Tôi tò mò về cách tính năng stale=update_after của API xem CouchDB hoạt động.Hiệu năng của CouchDB's stale = update_after là gì?

tôi có thể thấy here rằng nó sẽ trả về kết quả cũ và sau đó cập nhật xem:

Nếu cũ = ok được thiết lập, CouchDB sẽ không làm mới quan điểm ngay cả khi nó là cũ, lợi ích là một một được cải thiện độ trễ truy vấn. Nếu stale = update_after được thiết lập, CouchDB sẽ cập nhật khung nhìn sau khi kết quả cũ được trả về. update_after được thêm vào trong phiên bản 1.1.0.

Giả sử rằng tôi đã chèn một số lượng lớn tài liệu - đủ để yêu cầu vài phút để cập nhật chỉ mục chế độ xem - và sau đó tôi truy vấn chế độ xem hai lần liên tiếp nhanh chóng với stale=update_after. Truy vấn đầu tiên sẽ trở lại rất nhanh; đó là toàn bộ điểm của update_after.

Câu hỏi của tôi là, truy vấn thứ 2 cũng sẽ trả lại kết quả cũ nhanh chóng hay nó sẽ chờ xem để hoàn tất cập nhật?

Trả lời

5

Truy vấn thứ hai cũng trả lại kết quả cũ. Nó sử dụng các kết quả một phần có sẵn tại thời điểm truy vấn truy cập vào máy chủ. Nếu bạn vừa thêm tài liệu, bạn ổn.

Nhưng nếu bạn đã sửa đổi chế độ xem của mình, truy vấn đầu tiên sẽ trả lại kết quả của truy vấn đầu tiên và kích hoạt xây dựng lại toàn bộ chế độ xem. Vì vậy, truy vấn thứ hai có thể sẽ không cung cấp kết quả hoặc chỉ có rất ít hàng. Vì vậy, câu trả lời ngắn gọn: Trong trường hợp của bạn, cả hai truy vấn sẽ trở lại nhanh chóng, với truy vấn thứ hai có thể đưa ra kết quả tương tự như kết quả đầu tiên, có thể với một số hàng bổ sung.

Hy vọng tôi có thể trợ giúp!

Yours, Bernhard

+1

Bạn có thể hòa giải yêu cầu của bạn với tuyên bố này: "Điều này cập nhật các chỉ số sau khi kết quả được trả về, nhưng cũng có thể làm chậm các truy vấn được thực hiện bởi các khách hàng khác đến khi cập nhật điểm đã được hoàn thành" (http://blog.safaribooksonline.com/2012/03/14/improving-couchdb-performance/) –

+2

Xin lỗi vì trả lời muộn: stale = update_after ALWAYS trả về ngay lập tức. Nếu "các khách hàng khác" không sử dụng cũ = update_after, truy vấn của họ bị trì hoãn. Nhưng điều này là một chút sai lầm, bởi vì các truy vấn của họ sẽ bị trì hoãn anyway. –

+0

cảm ơn bạn đã phản hồi lại điều này một lần nữa Bernhard. Biết điều này sẽ trở lại luôn luôn giúp tôi rất nhiều. – Christian

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