【问题标题】:Flex - best strategy for keeping client data in synch with backend database?Flex - 保持客户端数据与后端数据库同步的最佳策略?
【发布时间】:2008-09-20 13:02:49
【问题描述】:

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

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

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

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

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

b.忽略问题并在发生过时数据问题时对其进行处理(冒着惹恼更有可能使用过时数据的用户的风险)

c。别的东西

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

【问题讨论】:

    标签: apache-flex remoting blazeds


    【解决方案1】:

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

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

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

    干杯

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          山姆

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:

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

              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 早于 ... 3 天或任何您认为适合您需要的行。

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

              【讨论】:

                【解决方案7】:

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

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

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

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

                问候, 光辉

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-01-20
                  • 2018-10-18
                  • 2014-08-20
                  • 1970-01-01
                  • 2012-11-07
                  • 2017-01-26
                  • 1970-01-01
                  • 2010-11-04
                  相关资源
                  最近更新 更多