Ich denke, das Problem Sie ist verweisen [1]. Cloudants Replikation ist 100% kompatibel mit CouchDB. In dieser Instanz zeigen die Protokolle von TouchDB an, dass der iOS-Netzwerkstapel auf unvollständigem JSON an TouchDB übergeben hat. Es ist nicht klar, wer in diesem Fall für den Replikationsfehler verantwortlich gemacht werden sollte.
[1] https://github.com/couchbaselabs/TouchDB-iOS/issues/241
Für die Kostenfrage, eine One-Shot-Pull-Replikation wird in einem GET auf die _changes
Feeds jedes Mal führt es passiert, und die andere zu Replikation erforderlich Anfragen. Diese _changes
Anfrage wird als leichte HTTP-Anfrage gegen Ihr Cloudant-Konto gezählt.
Ob dies jedoch als mehr oder weniger Anfragen insgesamt funktioniert, hängt von der Anzahl der Änderungen ab, die vom Remote-Server kommen.
Es ist auch wichtig, dass die Zahl der _changes
Anrufe zu erinnern ist sehr klein im Verhältnis zur Anzahl anderer Anrufe beteiligt (zum Beispiel immer den Inhalt der Änderungen selbst und vor allem, wenn es viele Attachments).
Während diese Frage zu TouchDB spezifisch ist, und ich erwähne spezifische Verhalten dieser Code-Basis, diese Antwort befasst sich mit den Anträgen beteiligt bei der Replikation zwischen zwei beliebigen Systemen die CouchDB-Replikation Protokoll sprechen [2].
[2] http://www.dataprotocols.org/en/latest/couchdb_replication.html
Lassen Sie uns ein konstruiertes Beispiel nehmen: 1 Update pro 10 Sekunden Fenster die Quelldatenbank für die Replikation, wo eine TouchDB Datenbank das Ziel ist. Nehmen wir eine Umfrage von 5 Minuten im Vergleich zu einer fortlaufenden Replikation. Zur Vereinfachung der Anrufzählung nehmen wir auch Anhänge aus dem Bild. Wir gehen auch davon aus, dass das Gerät eine konstante Netzwerkverbindung hat.
Für den kontinuierlichen Fall erhält jede 10s TouchDB ein Update in der _changes
Feed. Dies führt dazu, dass die longpoll
-Verbindung geschlossen wird. TouchDB führt dann die Änderungen durch und fordert die Updates von der Quelldatenbank an; eine oder mehrere GET-Anforderungen auf dem Remote-Server. Während dies geschieht, muss TouchDB eine weitere longpoll
Anfrage zu _changes
öffnen.In einem Zeitraum von fünf Minuten würden Sie also mit 30 Aufrufen von _changes enden, plus alle Anrufe, um Dokumente abzurufen und Prüfpunkte aufzuzeichnen.
Vergleichen Sie dies alle fünf Minuten mit einer einmaligen Replikation. Sie erhalten Benachrichtigungen über die 30 Updates in einem _changes Feed-Aufruf. TouchDB implementiert eine Optimierung [3], wobei es _all_docs , um aktualisierte Dokumente zu erhalten für 1- Umdrehungen nennen, so dass Sie könnte mit einem einzigen Anruf beenden, um alle 30 Dokumente (nicht möglich im kontinuierlichen Fall als erhalten Sie habe eine einzige Änderung erhalten). Dann musst du die Checkpoint-Dokumente aufzeichnen. Im besten Fall weniger als 5 HTTP-Aufrufe, höchstens etwa ein Drittel von den kontinuierlichen Fall, da Sie extra _changes
Anfragen vermieden haben.
[3] https://github.com/couchbaselabs/TouchDB-iOS/wiki/Replication-Algorithm#performance
Es kommt auf die Häufigkeit der Aktualisierungen, die Sie an die Quelle Datenbank erwarten. One-Shot-Replikation bietet wahrscheinlich einen glatteren Preis Kurve, wie Sie in einer besseren Kontrolle über die Anzahl der Anforderungen, die Sie vornehmen.
Eine weitere Frage ist, wie oft Verbindungen wegen der Netzwerkunterbrechungen fallen, die regelmäßig mit mobilen Geräten passieren. Die fortlaufenden Replikationen von TouchDB werden jedes Mal neu gestartet, wenn der Benutzer online geht (falls über die _replicator-Datenbank hinzugefügt). Dies ist eine weitere Quelle von unvorhersehbaren Kosten.
Die Vorteile einer direkteren Sichtbarkeit von Änderungen können jedoch sicherlich die Unsicherheit wert sein.
"Cloudant ist nicht mit den fortlaufenden Replikationen von TouchDB kompatibel." Warum nicht? – garbados
Mike bezog sich in seiner Antwort auf das Problem der Inkompatibilität. Es ist ein offenes Problem, das noch nicht gelöst ist. Weder die TouchDB-Autoren noch die Cloudant-Unterstützung konnten feststellen, woher das Problem stammt, aber wir konnten es relativ einfach reproduzieren. – airpaulg