2016-09-06 1 views
2

Ich bin neu bei CouchDB und nehme an, dass mein _changes feed 8000 Zeilen enthält, wobei last_seq 8000 ist. Dann aktualisiere ich ein Dokument (welches zuvor mit seq = 4000-xxxx, rev = 1-xxxxx aktualisiert wurde)) und es wird auf die Änderungen feed als seq = 8001-xxxx, rev = 2-xxxx oder?CouchDB ändert feed seq shift

Meine Frage ist, wie behandelt CouchDB das tatsächlich? Wenn ich ein Dokument aktualisiere, erhält es die neueste Seq-ID (8001-xxxx), aber welches Dokument nimmt seinen alten Platz ein (Seq 4000-xxxx)? Und da wir Dinge aktualisieren und es nur einen Eintrag pro Dokument gibt, wie stiegen die Zeilen in den Änderungen von 8000 auf 8001?

Antwort

2

Steven. Wenn Sie ein Dokument aktualisieren, wird es in das Ende der Seq-Warteschlange verschoben. Es wird also "Löcher" in Ihrem Sequenzindex geben, wo sich das alte Dokument befand.

In Ihrem Beispiel zeigt der Feed für Änderungen 8.000 Zeilen, last_seq = 8001, und Sie sehen seq 1, 2, 3, ..., 3997, 3998, 3999, 4001, 4002, 4003, ... , 7999, 8000, 8001. Beachten Sie, dass 4000 in der Sequenz fehlt.

Dieser "Zug" ist garantiert atomar; Wenn Sie also _changes abfragen, sehen Sie entweder seq 4000 oder 8001, aber nicht beides. Jede Dokument-ID befindet sich genau einmal im Sequenzindex.

(Kleine Anmerkung, wenn Sie _changes abfragen kontinuierlich, mit ?feed=continuous dann natürlich können Sie doppelte Dokument-IDs, weil CouchDB Sie eine Echtzeit-Feed jederzeit ein Dokument aktualisiert wird, gibt.)

+0

Hier ist die seltsame Sache, das gleiche Beispiel zu verwenden, wenn ich ein Dokument aktualisieren, um es zu 8001 geht, aber die alte Sequenz 4000 nicht fehlt, sondern es durch ein anderes Dokument belegt ist, die mir Schikanen. Ich benutze Cloudant BTW. –

+0

Und außerdem, manchmal, nachdem ich eine Änderung an einem Dokument vorgenommen habe, ist die Änderungen nicht einmal auf der neuesten Seq-ID. Ich bin mir nicht sicher, ob dies ein Cloudant-spezifisches Problem ist. –