Wie wird die lokale parse.com-Datenbank inkrementell aktualisiert?

9

Ich habe eine parse.com-basierte App mit Offline-Funktionen, bei der die gesamte Datenbank lokal gespeichert wird (localStorage auf Web-Clients und parse.com lokale Datenbank auf mobilen Clients). Ich suche nach einer Designlösung, um die lokale Datenbank mit den neuesten Änderungen in der entfernten Datenbank effizient zu aktualisieren. Die Möglichkeiten, die ich mir vorstellen kann, sind:

  1. Journaling mit Code-Triggern . Richten Sie Cloud-Code-Trigger (afterSave, afterDelete) für jedes Objekt ein und fügen Sie der Journaltabelle jedes Mal ein Protokoll hinzu, wenn ein Objekt gespeichert oder gelöscht wurde. Die Clients fragen die Tabelle nach Updates ab und merken sich lastUpdateTime für nachfolgende Anfragen.

    Pros: a) wir können eine sehr detaillierte Zusammenfassung haben, was geändert wurde und wer die Änderung vorgenommen hat. b) alle Änderungen sind sofort für andere Clients verfügbar (z. B. kann ein Tabellenanruf für Benachrichtigungen in Echtzeit mit geringen Verzögerungen abgefragt werden)

    Nachteile: a) Es gibt möglicherweise zu viele Einträge in der Tabelle

  2. Journaling mit Hintergrundjob . Richten Sie einen Hintergrundjob ein, der alle Tabellen nach updatedAt abfragt, die Journaltabelle auffüllt und die lastUpdateTime für nachfolgende Anforderungen speichert.

    Vorteile: a) weniger Einträge in der Journaltabelle

    Nachteile: a) Änderungen sind mit unvorhersehbarer Verzögerung verfügbar (nicht für Echtzeit-Benachrichtigungen geeignet?) b) kann keine Löschungen verfolgen, es ist immer noch notwendig, eine weitere Tabelle einzurichten, um Löschungen nachzuverfolgen oder Soft-Delete zu implementieren c) weniger Details in der log (zB wenn ein Objekt von einem Benutzer erstellt und von einem anderen Benutzer gelöscht wird, wissen wir nicht, wer ein Objekt erstellt hat)

  3. Kein Journal . Alle Clients fragen alle Tabellen nach updatedAt ab und speichern lastUpdateTime für nachfolgende Anforderungen.

    Vorteile: a) einfach zu implementieren, b) Änderungen sind sofort verfügbar

    Nachteile: a) dasselbe Problem mit Löschungen wie in 2 , b) ineffizient (ich glaube, dass die Abfrage von 20+ Tabellen von allen Clients keine gute Idee ist

Wir haben auch eine Benutzeroberfläche, auf der der Nutzer die aktuelle Aktivität sehen kann (wer hat was geändert), also lehne ich mich an Nummer 1 an, aber die potenzielle Größe des Tisches beunruhigt mich.

    
Dziamid 26.08.2015, 07:37
quelle

1 Antwort

1

Der Client muss unabhängig vom aktuellen Status wiederhergestellt werden können. Dies ist kritisch, wenn Sie lokalen Speicher verwenden, der vom Benutzer möglicherweise gelöscht wird. In diesem Fall benötigen Sie einen wiederherstellbaren Zustand. Zusätzlich muss der Client in der Lage sein, nur die für ihn erforderliche Transaktion abzurufen.

  1. Implementieren eines Transaktionsspeichers im Back-End
  2. Einen Wiederherstellungsmechanismus für den Fall erstellen, dass der lokale Speicher offline ist
  3. Journaling mit Code-Triggern oder Verwendung des Ereignisquellen-Db-Typ-Mechanismus, so dass Sie vollständigen Verlauf haben und diesen verwenden können, um Tabellen für den Client zu erstellen.

Abschließend - Modifiziertes Journaling mit Code-Triggern (Modifiziert, um den Status für den Client im Server wiederherzustellen und zu speichern und damit die Daten abzufragen)

    
lazy 01.09.2015, 05:04
quelle