2008-09-20 9 views
7

In einer Adobe Flex-Anwendung, die BlazeDS AMF-Remoting verwendet, ist die beste Strategie, um die lokalen Daten aktuell und synchron zur Backend-Datenbank zu halten.Flex - die beste Strategie, um Kundendaten synchron mit der Backend-Datenbank zu halten?

In einer typischen Webanwendung aktualisieren Webseiten die Ansicht jedes Mal, wenn sie geladen werden, sodass die Daten in der Ansicht niemals zu alt sind.

In einer Flex-Anwendung gibt es die Möglichkeit, mehr Daten im Voraus zu laden, um sie über Tabs, Panels usw. gemeinsam zu nutzen. Diese Daten werden in der Regel seltener vom Back-End aktualisiert, sodass die Wahrscheinlichkeit größer ist veraltet - führt zu Problemen beim Speichern usw.

Also, was ist der beste Weg, um dieses Problem zu überwinden?

a. die Flex-Anwendung so erstellen, als ob es eine Web-App wäre - laden Sie die Backend-Daten für jede mögliche Ansichtswechsel neu

b. Ignorieren Sie das Problem und gehen Sie einfach mit veralteten Datenproblemen um, wenn sie auftreten (auf die Gefahr von nervigen Benutzern, die mit veralteten Daten arbeiten)

c. etwas anderes

In meinem Fall ist es nicht möglich, den Datenkanal über LiveCycle RTMP offen zu halten.

Antwort

0

In der Vergangenheit habe ich mit der Wahl "a" gegangen. Wenn Sie Remote-Objekte verwenden, können Sie eine Logik im Cache-Stil einrichten, um sie am Remote-Ende synchron zu halten.

Sam

0

Können Sie RTMP nicht über HTTP (HTTP Polling)? Auf diese Weise können Sie immer noch RTMP verwenden, und obwohl es viel langsamer als echtes RTMP ist, können Sie immer noch Updates auf diese Weise braodcast.

Wir haben eine App, die RTMP verwendet, um Einfügungen, Aktualisierungen und Löschungen zu signalisieren, indem einfach RTMP-Nachrichten mit dem Table/PrimaryKey-Paar gesendet werden und die App ihre Daten automatisch aktualisiert. Wir tun dies über HTTP mit RTMP.

1

Wenn Sie das Nachrichtenprotokoll in BlazeDS nicht verwenden können, dann müsste ich zustimmen, dass Sie RTMP-Abfragen über HTTP durchführen sollten. Die Daten werden komprimiert, wenn RTMP in AMF verwendet wird, was die Vorgänge beschleunigt, sodass der Client zwischen den Aktualisierungen lange wartet. Dies würde es Ihnen auch ermöglichen, später auf die Push-Methoden zu skalieren, wenn der Kunde des Produkts beschließt, die zusätzliche Hardware und Lizenzen zu bezahlen.

2

a. Erwägen Sie, Back-End-Änderungen über einen Proxy zu optimieren, der seine eigene Benachrichtigung oder Polung durchführt: Er weiß, ob eine der Daten fehlerhaft ist, und kehrt schnell zurück (a la a 304), wenn nicht.

b. Oft sehen Benutzer mehr als sie berühren. Betrachten Sie eine Ebene der Aktualisierung für das Suchen und eine andere, wenn sie beginnen und weiter bearbeiten.

Schauen Sie sich BuzzWord an: Es wird beim Bearbeiten gesperrt, aber auch automatisch häufig gespeichert und entsperrt.

Prost

1

Sie Livecycle und RTMP nicht brauchen, um einen Benachrichtigungsmechanismus zu haben, können Sie es mit den Kanälen von BlazeDS tun können, und verwenden Sie einen Streaming/Lang-Abfrage-Strategie

0

ich diesen Artikel gefunden zur Synchronisation:

http://www.databasejournal.com/features/sybase/article.php/3769756/The-Missing-Sync.htm

Es geht nicht in technischen Details, aber Sie können erraten, welche Art von Codierung diese Strategien umsetzen.

Ich habe keine Lust Benachrichtigungen von meinem Server auch so ich Synchronisationsstrategien benötigen.

Zum Beispiel habe ich eine Liste von Unternehmen in meinem ModelLocator. Es ändert sich nicht wirklich oft, es ist nicht groß genug, um Paginierung zu berücksichtigen, ich möchte nicht alles (removeAll()) bei jeder Benutzeraktion neu laden, aber ich möchte nicht, dass meine Anwendung abstürzt oder beschädigte Daten aktualisiert Falls es von einer anderen Instanz der Anwendung aktualisiert oder gelöscht wurde.

Was ich jetzt in einer Sitzung speichert die SELECT-Datetime. Wenn ich zurückkomme, um die Daten zu aktualisieren, wähle ICH WHERE last_modified> $ SESSION ['lastLoad']

Auf diese Weise bekomme ich nur Zeilen geändert, nachdem ich die Daten geladen habe (die meiste Zeit 0 Zeilen).

Natürlich müssen Sie last_modified auf jeder INSERT und UPDATE aktualisieren.

Für DELETE ist es schwieriger. Wie der Mann in seinem Artikel darauf hinweist: "Wie können wir einen Datensatz senden, der nicht mehr existiert"

Sie müssen flex sagen, welches Element es löschen sollte (sagen nach ID), so dass Sie nicht wirklich DELETE löschen können:)

Wenn ein Benutzer eine Firma löschen Sie ein Update stattdessen tun: deleted = 1 dann auf Refresh-Unternehmen, für die Zeile, in der deleted = 1 die ID zurückschicken gerade so zu biegen, dass es diese Unternehmen sicher macht, ist nicht im Modell mehr.

Last but not least, müssen Sie eine Funktion schreiben, die saubere Zeilen, in denen gelöscht = 1 und last_modified ist älter als ... 3 Tage oder was auch immer Sie zu Ihren Ansprüchen passt denken.

Die gute Sache ist, dass, wenn ein Benutzer eine Zeile versehentlich gelöscht werden, es ist immer noch in der Datenbank und Sie können speichern von echten innerhalb 3 Tage zu löschen.

0

Anstatt Caching auf flex Client, warum nicht Caching auf Server-Seite? Einige Gründe,

1) Wenn Sie Cache-Daten auf Server-Seite, seine zentralisierte und Sie können alle Clients den gleichen Zustand der Daten

2) Es gibt viel bessere Möglichkeiten Seite auf Server für das Caching stellen Sie sicher, haben eher als auf Flex. Sie können auch einen Cron-Job haben, der Daten auf einer bestimmten Frequenz aktualisiert, etwa alle 24 Stunden.

3) Wenn Daten auf dem Server zwischengespeichert und es muss nicht aus db jedes Mal holen, die Kommunikation mit flex wird

Grüße viel schneller, Tejas