在使用BlazeDS AMF远程处理的Adobe Flex应用程序中,保持本地数据新鲜并与后端数据库同步的最佳策略是什么?
在典型的Web应用程序中,网页每次加载时都会刷新视图,因此视图中的数据永远不会太旧。
在Flex应用程序中,可以预先加载更多数据,以便在选项卡,面板等之间共享。这些数据通常不会经常从后端刷新,因此它更有可能过时 - 在保存时导致问题等。
那么,克服这个问题的最佳方法是什么?
一个。构建Flex应用程序就好像它是一个Web应用程序 - 在每次可能的视图更改时重新加载后端数据
湾忽略这个问题,只是在问题出现时处理陈旧的数据问题(冒着烦人的用户,他们更有可能使用过时的数据)
℃。别的什么
在我的情况下,不能通过LiveCycle RTMP保持数据通道打开。
答案 0 :(得分:2)
一个。考虑通过执行自己的通知或轮询的代理来优化后端更改:它知道是否有任何数据是脏的,如果没有,则会快速返回(la a 304)。
湾通常,用户看起来比他们触摸的更多。当他们开始并继续编辑时,请考虑一个级别的刷新以及另一个级别的刷新。
看看BuzzWord:它会锁定编辑,但也会自动保存和解锁。
干杯
答案 1 :(得分:1)
如果您无法在BlazeDS中使用消息传递协议,那么我必须同意您应该通过HTTP进行RTMP轮询。在AMF中使用RTMP时会压缩数据,这有助于加快速度,使客户端在更新之间等待很长时间。如果产品的客户决定支付额外的硬件和许可证,这也可以让您稍后扩展到推送方法。
答案 2 :(得分:1)
您不需要使用Livecycle和RTMP来获得通知机制,您可以使用BlazeDS中的频道并使用流媒体/长轮询策略
答案 3 :(得分:0)
过去我选择了“a”。如果您使用的是远程对象,则可以设置一些缓存样式的逻辑,以使它们在远程端保持同步。
萨姆
答案 4 :(得分:0)
你不能通过HTTP使用RTMP(HTTP轮询)吗? 这样你仍然可以使用RTMP,虽然它比真正的RTMP慢得多,你仍然可以通过这种方式进行广播更新。
我们有一个应用程序,它使用RTMP通过简单地广播包含Table / PrimaryKey对的RTMP消息来指示插入,更新和删除,让应用程序自动更新它的数据。我们使用RTMP通过Http执行此操作。
答案 5 :(得分:0)
我发现这篇关于同步的文章:
http://www.databasejournal.com/features/sybase/article.php/3769756/The-Missing-Sync.htm
它不会涉及技术细节,但您可以猜测哪种编码将实施此策略。
我也没有来自服务器的花哨通知,所以我需要同步策略。
例如,我的modelLocator中有公司列表。它并没有经常改变,它不足以考虑分页,我不想在每个用户操作上重新加载它(removeAll())但我不希望我的应用程序崩溃或更新损坏的数据它已从应用程序的另一个实例更新或删除。
我现在所做的是在SESSION中保存SELECT日期时间。当我回来刷新数据时我选择了WHERE last_modified> $ SESSION ['lastLoad']
这样我只能在加载数据后修改行(大部分时间是0行)。
显然你需要在每次INSERT和UPDATE上更新last_modified。
对于DELETE来说,它更棘手。正如那个人在他的文章中指出的那样: “我们怎样才能发送不再存在的记录”
你需要告诉flex它应该删除哪个项目(例如ID),这样你就无法真正删除DELETE:)
当用户删除公司时,您执行UPDATE:deleted = 1 然后在刷新公司,对于删除= 1的行,您只需将ID发送回flex,以确保该公司不再在模型中。
最后但并非最不重要的是,您需要编写一个清除行的函数,其中deleted = 1且last_modified早于... 3天或任何您认为适合您需要的行。
好消息是,如果用户错误地删除了一行,它仍然在数据库中,您可以在3天内将其从实际删除中保存。
答案 6 :(得分:0)
为什么不在服务器端进行缓存,而不是在Flex客户端上缓存?有些原因,
1)当您在服务器端缓存数据时,它是集中的,您可以确保所有客户端具有相同的数据状态
2)服务器端有更好的选项可供缓存而不是flex。此外,您可以拥有一个cron作业,根据某些频率刷新数据,例如每24小时一次。
3)由于数据缓存在服务器上,并且每次都不需要从db中获取数据,因此与flex的通信速度会快得多
此致 特加斯