7

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

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

在 Flex 应用程序中,倾向于预先加载更多数据以在选项卡、面板等之间共享。这些数据通常不经常从后端刷新,因此它过时的可能性更大 - 导致保存时的问题等

那么,克服这个问题的最佳方法是什么?

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

湾。忽略问题并在发生陈旧数据问题时处理它们(冒着惹恼更有可能使用陈旧数据的用户的风险)

C。别的东西

就我而言,通过 LiveCycle RTMP 保持数据通道打开不是一种选择。

4

7 回答 7

2

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

湾。通常,用户看起来比他们触摸的要多。考虑一个级别的刷新查找和另一个当他们开始并继续编辑时。

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

干杯

于 2008-10-19T18:54:33.853 回答
1

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

于 2008-09-25T12:52:40.797 回答
1

您不需要 Livecycle 和 RTMP 来获得通知机制,您可以使用 BlazeDS 的通道并使用流式/长轮询策略

于 2009-04-03T13:38:23.557 回答
0

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

山姆

于 2008-09-20T13:15:04.747 回答
0

您不能使用 RTMP over HTTP(HTTP 轮询)吗?这样你仍然可以使用 RTMP,虽然它比真正的 RTMP 慢得多,但你仍然可以通过这种方式广播更新。

我们有一个应用程序,它使用 RTMP 通过简单地广播包含 Table/PrimaryKey 对的 RTMP 消息来表示插入、更新和删除,让应用程序自动更新它的数据。我们使用 RTMP 在 Http 上执行此操作。

于 2008-09-25T12:39:54.617 回答
0

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

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

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

我的服务器也没有花哨的通知,所以我需要同步策略。

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

我现在所做的是将 SELECT 日期时间保存在 SESSION 中。当我回来刷新数据时,我 SELECT WHERE last_modified>$SESSION['lastLoad']

这样我在加载数据后只修改了行(大部分时间为 0 行)。

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

对于 DELETE,它更棘手。正如那家伙在他的文章中指出的那样:“我们怎样才能发送一个不再存在的记录”

你需要告诉 flex 它应该删除哪个项目(比如通过 ID),这样你就不能真正在 DELETE 上删除 :)

当用户删除公司时,您改为执行更新:deleted=1 然后在刷新公司时,对于已删除=1 的行,您只需将 ID 发送回 flex 以确保该公司不再在模型中。

最后但并非最不重要的一点是,您需要编写一个函数来清除已删除=1 和 last_modified 早于 ... 3days 或您认为适合您需要的任何行。

好消息是,如果用户错误地删除了一行,它仍在数据库中,您可以在 3 天内将其从真正的删除中保存。

于 2009-10-02T02:14:47.043 回答
0

与其在 flex 客户端缓存,为什么不在服务器端缓存呢?一些原因,

1)当您在服务器端缓存数据时,它是集中的,您可以确保所有客户端具有相同的数据状态

2)在服务器端有更好的缓存选项,而不是在 flex 上。您也可以有一个 cron 作业,它根据某种频率(比如每 24 小时)刷新一次数据。

3)由于数据缓存在服务器上,不需要每次都从db中获取,与flex的通信会快得多

问候, 光辉

于 2012-03-31T07:25:04.250 回答