移动应用的后台数据同步

8
我们正在构建一个API和移动应用程序,它们基于一个包含几十万条记录的主要表的数据库。我们的移动开发人员强烈推荐在本地数据库中预加载完整的表,并使用服务来同步手机针对“updated_at”列所做的更改。尽管这样可以通过使应用程序搜索本地存储来显著提高应用程序的性能,但我担心随着我们获得更多客户,这将给服务器带来很大的负载。有其他人处理过这个问题吗?这是一个好主意还是坏主意?您可以分享一些见解和链接吗?

请查看SymmetricDS。 - Neil McGuigan
谢谢@NeilMcGuigan,我对这个想法的价值更感兴趣,而不是寻找实现同步的工具。比如,将数据同步到客户端,但可能永远不会使用,对服务器来说是否值得付出巨大代价呢? - quickshiftin
我不确定为什么这必然意味着服务器负载更重。无论是实时进行数据库插入,还是稍后通过同步进行,都不应该改变负载。本地存储数据的一个主要优点是应用程序可以离线使用:http://alistapart.com/article/offline-first - Neil McGuigan
我们尝试同步的不是手机上的插入操作,而是服务器上发生的更改。显然,手机可以离线使用,这是好处... 但我担心的是,大量客户端尝试同步可能对他们没有意义的大量数据。 - quickshiftin
你链接的这篇文章还不错,@NeilMcGuigan。但它并没有涉及到我要解决的问题。就拿出站反向代理缓存为例,服务器只会缓存用户查询过的内容,而不是整个数据库。同样地,在移动离线使用的概念中,我想知道是否需要更聪明的同步方案。此外,我想听听那些已经解决了这个问题的人的意见。 - quickshiftin
2个回答

10

免责声明:自2008年以来,我一直在从事开源同步数据库的工作,因此我对解决方案空间有偏见。

首先,不要开始时就认为你将跟踪表上的updated_at列,这条路会导致疯狂。 专门的团队需要花费数年时间构建同步解决方案,才能避免像一堆hack一样的感觉。

我的团队一直在构建轻量级嵌入式数据库,它允许您从本地iOS、Android、.NET或JavaScript代码存储和交互本地JSON对象。数据库API全部都是本地的,因此您可以查询、读取和写入,而无需担心网络链接状态。对于开发人员来说,网络连接成为您只需配置一次的东西,而不是每次需要数据时都要处理的东西。

我们还建立了一个服务器, 使不同类型的数据流轻松构建应用程序。您的应用程序的服务器端可以变得非常简单,只需使用基于映射减少的JavaScript同步函数即可将数据路由到通道(并授予用户或组访问通道)。您还可以通过通道驱动后端进程,因此用户操作会触发实际事件,例如发送推送通知或更新现有后端API。
如果这些中的任何内容听起来有趣,我们在邮件列表上拥有活跃的用户和贡献者社区。我们所做的一切都是开源的,并且由于我们使用开源协议,因此有广泛生态系统与我们可以同步。

Chris,谢谢你。我正在度假,但会阅读你的链接。如果手机没有在本地更改任何数据,我们能否安全地使用updated_at同步? - quickshiftin

5
尽管这是一个老问题,但我最近遇到了几次,并希望通过为任何数据库(在我的情况下是移动设备上的sqlite和中央服务器上的mySQL)和任何模式编写此问题的设计模式来概括该问题。 这是设计模式在Google文档中:mobileSync on Google Docs
此外,还有一个应用程序和单元测试来证明该模式按规定工作。请参见GitHub链接:IOS App for MobileSync
或者,在GitHub上搜索johngoodstadt然后搜索mobile Sync。 Android版本即将推出(2016年5月)。
尽管它不提供付费服务提供的完全同步服务,但如果您的要求与大多数移动解决方案的要求相符,它可以节省您很多实验时间。请反馈任何问题错误或漏洞,以便我可以完善此设计模式/代码。
谢谢
John Goodstadt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接