Flex-使客户端数据与后端数据库保持同步的最佳策略?

时间:2020-03-06 14:29:01  来源:igfitidea点击:

在使用BlazeDS AMF远程处理的Adobe flex应用程序中,使本地数据保持最新并与后端数据库同步的最佳策略是什么?

在典型的Web应用程序中,网页每次加载时都会刷新视图,因此视图中的数据永远不会太旧。

在Flex应用程序中,倾向于先加载更多数据以在选项卡,面板等之间共享。通常从后端刷新此数据的频率降低,因此过时的可能性更大,导致出现问题保存时等

那么,解决此问题的最佳方法是什么?

一种。构建Flex应用程序,就好像它是一个Web应用程序一样,在每次可能的视图更改时都重新加载后端数据

b。忽略该问题并仅在发生时处理过时的数据问题(冒着使更可能使用过时的数据的用户烦恼的风险)

C。其他的东西

就我而言,不能通过LiveCycle RTMP保持数据通道打开。

解决方案

在过去,我选择了" a"。如果使用的是远程对象,则可以设置一些缓存样式的逻辑,以使它们在远程端保持同步。

山姆

我们不能通过HTTP(HTTP轮询)使用RTMP吗?
这样,我们仍然可以使用RTMP,尽管它比真实的RTMP慢得多,但是我们仍然可以通过这种方式进行广播广播。

我们有一个应用程序使用RTMP通过简单地广播包含Table / PrimaryKey对的RTMP消息来发出插入,更新和删除的信号,而让该应用程序自动更新其数据。我们使用RTMP通过Http进行此操作。

如果我们不能在BlazeDS中使用消息传递协议,那么我将不得不同意我们应该通过HTTP进行RTMP轮询。在AMF中使用RTMP时,数据将被压缩,这有助于加快处理速度,因此客户端在两次更新之间等待很长时间。如果产品的客户决定为额外的硬件和许可证付费,这也将允许我们以后扩展到推送方法。

一种。考虑通过执行自身通知或者轮询的代理来优化后端更改:它知道是否有任何数据是脏的,如果不是,它将快速返回(大约304)。

b。通常,用户看起来比他们触摸的要多。考虑一种刷新级别以供查找,另一种刷新级别则用于它们的开始并继续编辑。

看一下BuzzWord:它会锁定编辑,但也会自动保存和解锁。

干杯

我们不需要Livecycle和RTMP即可拥有通知机制,可以使用BlazeDS的频道并使用流/长轮询策略

我发现这篇关于同步的文章:

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

它没有涉及技术细节,但是我们可以猜测哪种编码将实现此策略。

我的服务器也没有通知,因此我需要同步策略。

例如,我的modelLocator中有一个公司列表。它实际上并不会经常更改,不足以考虑分页,我不想在每个用户操作上重新加载所有内容(removeAll()),但我不希望我的应用程序崩溃或者在其中更新损坏的数据如果它已从应用程序的另一个实例更新或者删除。

我现在要做的是将SELECT日期时间保存在会话中。当我回来刷新数据时,我在哪里选择了last_modified> $ SESSION ['lastLoad']

这样,我在加载数据后仅修改行(大多数情况下为0行)。

显然,我们需要在每个INSERT和UPDATE上更新last_modified。

对于DELETE,则比较棘手。正如那个家伙在他的文章中指出的那样:
"我们如何发送不再存在的记录"

我们需要告诉flex应该删除哪个项目(以ID表示),这样就不能真正在DELETE上进行DELETE :)

当用户删除公司时,我们改为执行UPDATE:Deleted = 1
然后在刷新公司中,对于delete = 1的行,我们只需发送回ID即可进行伸缩,以确保该公司不再在模型中。

最后但并非最不重要的一点是,我们需要编写一个函数,以清除delete = 1和last_modified早于... 3天或者任何我们认为合适的行。

好处是,如果用户错误地删除了一行,则该行仍在数据库中,我们可以在3天之内将其从真正的删除中保存下来。