Direktes Lesen von RavenDb nach dem Schreiben gibt inkonsistente Daten zurück

8

Ich habe einen Abgleichprozess, bei dem ein Hintergrundthread regelmäßig eine Liste von Objekt-IDs von einem externen Webdienst abruft und versucht, fehlende Entitäten zu einer eingebetteten RavenDb-Datenbank hinzuzufügen. Die Schleife, die diesen Prozess ausführt, ist die folgende:

%Vor%

Die Implementierung von GetPageByPageId() und AddPage() ist wie folgt:

%Vor%

Das Problem ist, dass das Ergebnis, wenn die Liste doppelte IDs hat, sobald es die erste ID hinzufügt und erneut nach dieser ID sucht, leer ist. Es ist so, als ob ein Finalisierungsschritt fehlt, der die neu hinzugefügte Entität registrieren würde. Wenn ich die Menge zu einem späteren Zeitpunkt von einem anderen Thread abfrage, wird die Entität mit der angegebenen ID zurückgegeben. Kann jemand sehen, was das Problem hier ist?

Danke,

    
ambog36 01.11.2011, 17:22
quelle

1 Antwort

19

Dies ist ein Ergebnis des eventuellen Konsistenzmodells, das Raven anwendet. Aktualisierungen der Indizes als Ergebnis von Schreibvorgängen erfolgen asynchron, und daher ist es möglich, dass das Ausführen eines Lesevorgangs kurz danach zu veralteten Ergebnissen führt. Sie können Ihre Abfrage ändern, um nicht veraltete Ergebnisse wie folgt zu erhalten:

%Vor%

Es gibt noch ein paar andere Optionen, die Ayende in diesem Blogbeitrag behandelt .

    
Steve Rowbotham 01.11.2011, 17:41
quelle