Tôi nghĩ vấn đề bạn đề cập đến là [1]. Bản sao của Cloudant tương thích 100% với CouchDB. Trong ví dụ này, nhật ký của TouchDB cho biết ngăn xếp mạng iOS đã vượt qua trên JSON không hoàn chỉnh tới TouchDB. Nó không rõ ràng ai là để đổ lỗi cho trong trường hợp này cho sự thất bại nhân rộng.
[1] https://github.com/couchbaselabs/TouchDB-iOS/issues/241
Đối với câu hỏi chi phí, một kéo sao chép một-shot sẽ dẫn đến một GET đến _changes
thức ăn mỗi lần xảy ra, cộng với các yêu cầu khác cần thiết để lặp. Yêu cầu _changes
này sẽ được tính là yêu cầu yêu cầu HTTP đối với tài khoản Cloudant của bạn.
Tuy nhiên, việc này có hiệu quả khi có ít hoặc nhiều yêu cầu tổng thể hơn tùy thuộc vào số lượng thay đổi sắp xuống từ máy chủ từ xa.
Nó cũng quan trọng cần nhớ rằng số lượng _changes
cuộc gọi là rất nhỏ so với số lượng cuộc gọi khác có liên quan (ví dụ, nhận được nội dung trong những thay đổi bản thân và đặc biệt là nếu có nhiều file đính kèm).
Trong khi câu hỏi này là cụ thể cho TouchDB, và tôi đề cập cụ thể hành vi của codebase rằng, đây giao dịch câu trả lời với các yêu cầu liên quan đến trong sự sao chép giữa bất kỳ hai hệ thống nói giao thức CouchDB sao chép [2].
[2] http://www.dataprotocols.org/en/latest/couchdb_replication.html
Hãy lấy một ví dụ giả tạo: 1 cập nhật mỗi 10 cửa sổ thứ hai để cơ sở dữ liệu nguồn cho các nhân rộng, nơi mà một cơ sở dữ liệu TouchDB là mục tiêu. Hãy tham gia một cuộc thăm dò dài 5 phút so với một bản sao liên tục. Để đơn giản hóa tính năng đếm cuộc gọi, chúng ta cũng lấy các tệp đính kèm ra khỏi ảnh . Chúng tôi cũng giả định thiết bị có kết nối mạng không đổi.
Đối với trường hợp liên tục, cứ 10 giây TouchDB sẽ nhận được bản cập nhật trong nguồn cấp dữ liệu _changes
. Điều này gây ra kết nối longpoll
để đóng. TouchDB sau đó chạy qua các thay đổi, yêu cầu cập nhật từ cơ sở dữ liệu nguồn ; một hoặc nhiều yêu cầu GET trên máy chủ từ xa. Trong khi điều này đang xảy ra, TouchDB phải mở một yêu cầu longpoll
tới _changes
.Vì vậy, trong khoảng thời gian năm phút, bạn sẽ kết thúc với có lẽ 30 cuộc gọi đến _changes, cộng với tất cả các cuộc gọi để nhận tài liệu và ghi lại các điểm kiểm tra.
So sánh điều này với bản sao một lần mỗi năm phút. Bạn muốn nhận được thông báo về 30 cập nhật trong một cuộc gọi nguồn cấp dữ liệu _changes. TouchDB thực hiện việc tối ưu hoá [3] theo đó nó sẽ gọi _all_docs để có được tài liệu cập nhật cho 1- revs, vì vậy bạn có thể kết thúc với một cuộc gọi duy nhất để có được tất cả 30 tài liệu (không thể trong trường hợp liên tục như bạn đã nhận được một thay đổi duy nhất). Sau đó, bạn đã có các tài liệu checkpoint để ghi lại. Ít hơn 5 cuộc gọi HTTP tốt nhất, ít nhất là khoảng 1/3 số trường hợp liên tục khi bạn đã tránh thêm yêu cầu _changes
.
[3] https://github.com/couchbaselabs/TouchDB-iOS/wiki/Replication-Algorithm#performance
Nó đi xuống đến tần suất cập nhật mà bạn mong đợi để nguồn cơ sở dữ liệu . Bản sao một lần có khả năng cung cấp một đường cong giá hấp dẫn hơn khi bạn kiểm soát tốt hơn số lượng yêu cầu bạn thực hiện.
Câu hỏi tiếp theo là tần suất kết nối sẽ giảm do ngắt kết nối mạng xảy ra thường xuyên với thiết bị di động. Sao chép liên tục của TouchDB sẽ kích hoạt lại mỗi khi người dùng xuất hiện trực tuyến (nếu được thêm thông qua cơ sở dữ liệu _replicator). Đây là một nguồn chi phí không thể dự đoán trước là .
Tuy nhiên, lợi ích từ khả năng hiển thị tức thì hơn về các thay đổi có thể chắc chắn đáng để đảm bảo sự không chắc chắn.
"Cloudant không tương thích với bản sao liên tục của TouchDB". Tại sao không? – garbados
Mike gọi vấn đề không tương thích trong câu trả lời của anh ta. Đó là một vấn đề mở chưa được giải quyết. Cả các tác giả TouchDB hoặc Cloudant đều không thể xác định nguồn gốc của vấn đề là gì, nhưng chúng tôi đã tái tạo nó một cách dễ dàng. – airpaulg