Cache-Invalidierung und Synchronisation angular / Back-End auch

8

Intro:

Ich habe eine komplexe und langanhaltende Abfrage auf dem Back-End, die eckige App auf dem Front-End zurückführt.

Derzeit verwendet die eckige App die zwischengespeicherten Daten auf dem Back-End, anstatt direkt aus der komplexen Abfrage zu lesen, was einige Minuten dauern würde. Der Cache wird jeden Morgen und jede Nacht warm.

Wenn Benutzer Änderungen an der Benutzerschnittstelle vornehmen und die Daten speichern, werden diese an die Serverseite übergeben und in der Datenbank gespeichert. Zu diesem Zeitpunkt ist die Benutzeroberfläche auf dem neuesten Stand, bis der Benutzer die Seite aktualisiert. Zur gleichen Zeit ist die Datenbank auf dem neuesten Stand, aber der Cache ist veraltet.

Wenn der Benutzer die Seite aktualisiert, werden die veralteten Cache-Werte auf der Seite angezeigt.

Weitere Informationen:

Ich denke jetzt darüber nach, wie man den Cache auffrischen kann, und jeder Rat von erfahreneren Leuten wäre sehr willkommen.

Meine Idee ist es, den Cache durch einen Cache-Job (einzeln) zu aktualisieren, der in die Warteschlange gestellt wird, sobald der Benutzer etwas speichert. Der Job wird die relevanten Informationen haben, was sich geändert hat, und der gesamte Cache muss nicht neu berechnet werden, sondern nur das Bit, das sich geändert hat.

Frageteil:

Mit welcher Technik kann ich den Benutzer auf dem Laufenden halten, selbst wenn der Benutzer die Seite aktualisiert? Sollte ich die 'Deltas' auf der Clientseite in Form von indexedDB oder localstorage speichern, wenn die Daten an den Server gesendet werden. Wenn die Seite also aktualisiert wird, liest der Benutzer die Daten aus dem lokalen Speicher oder der indizierten Datenbank.

Ich denke immer noch an diesen Tiefpunkt, offensichtlich habe ich nicht viel Erfahrung darin, irgendwelche Kommentare über die Richtungen, die ich bis jetzt genommen habe?

Grundsätzlich kann ich alles ändern, einschließlich Backend / Front-End / Caching, es ist immer noch in der POC-Phase, ich versuche nur so gut wie möglich darüber informiert zu sein, was für andere Leute funktioniert hat.

Aktualisieren

Wenig mehr Hintergrund. Ich arbeite an einer indexähnlichen Seite, daher gibt es mehrere Datensätze, die inline bearbeitet werden können.

Ich mache auch eine Transformation der flachen db-Datensätze im Backend, bevor ich sie in die map-ähnliche Struktur übergebe und sie in Form von json an das Frontend übergebe.

    
Gandalf StormCrow 06.11.2015, 22:40
quelle

3 Antworten

3

Ich denke, der einfachste Weg wäre, sicherzustellen, dass Sie wissen, wann der Cache erstellt wurde. Wenn Sie Änderungen vornehmen, speichern Sie den aktuellen Status der Seite in localStorage zusammen mit der Uhrzeit des Caches. Wenn Sie die Seite laden, erhalten Sie die zwischengespeicherten Daten. Überprüfen Sie, ob es sich um eine aktuellere Version als Ihre localStorage-Version handelt. Wenn dies der Fall ist, verwenden Sie den Cache, wenn nicht, laden Sie Ihre Daten von localStorage neu, da sie die zwischengespeicherten Daten und Ihre Änderungen bereits enthält.

    
dave 08.11.2015 15:48
quelle
2

Ihre Frage ist zu lang, lassen Sie mich die Fakten zusammenfassen.

  1. Sie haben viele Informationen in der Datenbank
  2. Die direkte Suchanfrage dauert einige Minuten
  3. Um eine schnelle Suche zu ermöglichen, verwenden Sie den Cache, der zweimal am Tag aktualisiert wird
  4. Wenn der Benutzer die Daten ändert, wird die Datenbank aktualisiert und der Cache nicht, so dass die Webseite veraltete Informationen aus dem Cache anzeigt.

Dies sieht wie ein typischer Cache unter Verwendung eines Szenarios aus und die Lösung ist offensichtlich: Sie sollten den Cache mit Deltas aktualisieren, sobald die Datenbank geändert wird. Die tatsächliche Implementierung hängt von der Anwendungsarchitektur und der Cache-Struktur ab.

Der typische Workflow für Ihr Problem wäre:

%Vor%     
AdamSkywalker 17.11.2015 11:55
quelle
0

Offenbar speichern Sie Ihre Daten in Tabellen und verwenden diese Tabellen mit einer komplexen Abfrage, um eine JSON-Konfiguration zum Rendern Ihrer index.html-Datei zu erstellen. Ich vermied dieses Problem, indem ich Tabellen vermied und eine NoSQL-Lösung verwendete. Ich erstelle das JSON-Konfigurationsobjekt auf der Clientseite und speichere dieses JSON-Konfigurationsobjekt in einer NoSQL-Sammlung. Ich mache eine einfache Abfrage mit der URL, um das JSON-Konfigurationsobjekt abzurufen und die index.html-Datei zu rendern.

Ich habe ein wenig Erfahrung beim Speichern des JSON-Konfigurationsobjekts mit AWS DynamoDB. Wenn ich schneller werden muss, wechsle ich wahrscheinlich zu AWS ElastiCache.

Der Schlüssel ist, dass Sie Ihr JSON-Konfigurationsobjekt mit einem nützlichen Schlüssel wie dem Site-Hostnamen oder einer anderen Basis-URL zwischenspeichern müssen und diese als Quelle der Wahrheit für das Rendern von index.html verwenden.

    
Gavin Palmer 17.11.2015 15:58
quelle

Tags und Links