2016-08-11 5 views
6

PersistentView wurde in akka 2.4 veraltet. Die Dokumentation empfiehlt, stattdessen zu PersistenceQuery zu wechseln. PersistenceQuery scheint jedoch nur auf das Ereignisprotokoll beschränkt zu sein, ohne dass der Snapshot-Speicher abgefragt werden kann.Gibt es eine Möglichkeit, Snapshots mit PersistenceQuery zu verwenden

Das Wiederherstellen eines Status aus einer großen Anzahl von Ereignissen dauert einige Zeit, daher ist die Verwendung von Snapshots für mich wichtig.

Ist die Abwertung der Zeit hier ein wenig voraus? Sollte ich weiter mit PersistentView arbeiten oder fehle ich etwas? Wie arbeite ich mit Schnappschüssen nur mit PersistenceQuery?

Danke

+0

Snapshots verwendet (wenn Sie sie nehmen, und wenn Sie Ihr System so konfigurieren, sie zu benutzen), wenn eine persistente Entität während der 'receiveRecover' Phase erholt sich der Zustand dieser Schauspieler zu bekommen erholt schneller. Ich verstehe nicht, warum Sie einen Snapshot-Speicher abfragen möchten. Etwas, das eine Persistenzabfrage verwendet (wie CQRS beim Erstellen eines Lesemodells), sollte individuelle Ereignisse und keinen aggregierten Zustands-Snapshot benötigen. – cmbaxter

+0

Das Erstellen eines Lesemodells ist genau mein Anwendungsfall. Von einer großen Anzahl selten verwendeter Ansichten mit Passivierung in einer LRU. Mit 'PersistentView' kann das Lesemodell seine eigenen Snapshots verwalten, die dann verwendet werden, um bei Bedarf den Zustand wiederherzustellen. Die Wiederherstellung von (Snapshot + letzte X-Ereignisse) ermöglicht eine bessere Latenz als die Wiederherstellung von (allen Ereignissen). Ihr Kommentar scheint zu implizieren, dass Snapshots nicht gut zu einem Lesemodell passen. Pflege um zu erarbeiten? – kostja

+0

Die gelesenen Modelle, die ich als Teil von Event Sourcing und CQRS erstellt habe, sind langlebig und werden in einer vollständigen Speicher-Engine aus dem Persistenz-Journal (das ist Elasticsearch) gespeichert. Die Builder für gelesenes Modell hören die Live-Ereignisströme (nach Tag) und projizieren die Ereignisse in Darstellungen der Entitäten, die in ES zum Zwecke der Abfrage leben. Die Ereignisse selbst funktionieren perfekt, um die Lesemodelle auf diese Weise aufzubauen. Ein Snapshot könnte nur nützlich sein, wenn ich von vielen hundert Ereignissen für eine bestimmte Entität zurückgeblieben wäre oder wenn ich das gesamte Lesemodell erneut erstellen müsste – cmbaxter

Antwort

1

Eine Möglichkeit, dies zu tun:

  • die Schauspieler Stellen Sie als "PersistentView" eine PersistentActor verlängern verwenden.
  • Speichern Sie Ihren PersistentQuery-Offset im Status des PersistentActor und speichern Sie Snapshots regelmäßig.
  • Zuerst Query Offset auf den frühesten Offset setzen.
  • Setzen Sie in receiveRecover den Abfrageoffset auf den im PersistentActor-Snapshot gespeicherten Offset.

Beispiel: https://github.com/benniekrijger/todo-service/blob/master/src/main/scala/com/todos/repository/TodoRepositoryView.scala

Verwandte Themen