首页 文章

在PhoneGap中与服务器同步数据的策略[关闭]

提问于
浏览
31

我正在使用AngularJS开始我的第一个PhoneGap项目 . 它是一个数据库驱动的应用程序,使用REST API作为后端 . 首先,我根本不打算在本地存储数据,因此没有Internet就不会有太大的作用 .

但是,我最终希望它能在本地存储数据,并在互联网可用时同步,因为我知道我个人有时会禁用手机上的互联网连接(飞机,电池电量不足),或者没有酒吧 . 我想知道你是否可以指出我为这种类型的同步提供一些好的资源 . 一些推荐的库?或者也许是对陷阱的讨论以及如何环绕它们 . 我用谷歌搜索了一下,但我想现在,我不知道要问的问题 .

另外,我打算首先 Build 互联网,然后添加同步....这是一个好主意,还是我在脚下拍摄自己?我是否需要从一开始就 Build 同步?

我有人建议首先将应用程序构建为仅限本地的应用程序,而不是仅限于Internet的部分,它具有一定的逻辑性 . 远程存储对我来说很重要 . 我知道决定与我的应用目标有很大关系,但从 Build 这个目标的角度来看,最终的目标是本地存储互联网存储和双向同步,什么会更容易?或者它甚至有所作为?

首先,我正在考虑使用UUID,而不是顺序整数主键 . 我还想过为每个设备分配一个ID,该ID在它生成的任何键上都有前缀,但这看起来很精致 . 有人使用过哪种技术?思考?

我想我需要一个好的系统来判断哪些数据已被同步 . 在客户端,我猜任何创建/编辑的记录都可以标记为同步 . 但是在服务器端,您有多个客户端,因此不起作用 . 我想你可以有一个last_updated时间戳,并同步所有更新同步上次成功同步 .

在多个地方编辑的记录怎么样?如果两个客户端编辑,然后想要同步,则有一些关于合并的歧义,比如在git或其他版本控制系统中合并分支时 . 你是如何处理的?我猜git通过存储每个提交的差异来做到这一点 . 我想你可以存储差异?我想的越多,听起来就越复杂 . 我是在过度思考还是在思考它?

客户端存储怎么样?我已经考虑过SQLite或PhoneGap本地存储(http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html) . 建议?同步将通过REST API进行交换,交换JSON,所以我在考虑将数据实际存储为JSON的东西,或类似JSON的东西's easy to convert, would be nice. On the other hand, if I'将需要交换某种数据差异格式,也许这就是我需要的东西存储?

1 回答

  • 26

    让我根据我与同步部分相关的经验提供您的问题的答案,因为我没有足够的PhoneGap经验,所以将跳过关于PhoneGap本地存储v SQLite的问题 .

    我想知道你是否可以指出我为这种类型的同步提供一些好的资源 . 一些推荐的库?

    有许多用于将PhoneGap应用程序与远程服务器同步的开源项目 . 但您可能需要根据自己的需要调整它们或实现自己的同步功能 . 下面我列出了一些开源项目 . 如果你在网上搜索,你一定已经知道了 .

    此外,您可能会考虑其他选项,但这取决于您的服务器端:

    此外,我打算首先 Build 互联网,然后添加同步....这是一个好主意,还是我在脚下拍摄自己?我是否需要从一开始就 Build 同步?

    我相信同步功能更像是一个额外的模块,不应该与业务逻辑的其他部分紧密结合 . 一旦开始考虑测试同步策略,您就会意识到如果您的同步工具与主代码分离,将更容易测试 .

    我认为您可以使用最低要求的功能尽快启动您的应用程序,而无需同步 . 但您最好考虑一下您的架构以及提前添加同步工具的方式 .

    首先,我正在考虑使用UUID,而不是顺序整数主键 . 我还想过为每个设备分配一个ID,该ID在它生成的任何键上都有前缀,但这看起来很精致 . 有人使用过哪种技术?思考?

    这取决于您的项目规范,特别是您的服务器端 . 例如,Azure移动服务仅允许主键的整数类型 . 虽然作为主键的唯一标识符在分布式系统中非常方便(但也有一些缺点) .

    与分配设备ID相关 - 我不确定理解这一点,虽然我不知道你的项目细节 . 看看我们系统中使用的同步算法(bidirectional sync using REST between multiple Android clients and central SQL Server) .

    在多个地方编辑的记录怎么样?如果两个客户端编辑,然后想要同步,则有一些关于合并的歧义,比如在git或其他版本控制系统中合并分支时 . 你是如何处理的?我猜git通过存储每个提交的差异来做到这一点 . 我想你可以存储差异?我想的越多,听起来就越复杂 . 我是在过度思考还是在思考它?

    您需要考虑如何处理系统中的冲突解决方案 .

    如果您系统中的冲突概率很高,例如用户将经常更改相同的记录 . 然后,您最好跟踪同步中已修改记录的哪些字段(列),然后在检测到冲突后:

    • 迭代冲突中服务器端记录的每个已修改字段

    • 将服务器记录的每个修改字段与客户端的相关字段进行比较 .

    • 如果未修改客户端字段,则不存在冲突,因此只需使用服务器字段覆盖它 .

    • 否则会发生冲突,因此请将两个字段的内容保存到报告的临时位置

    • 在同步结束时生成冲突记录报告 .

相关问题