android - 在移动应用程序和网络服务器之间同步大量数据

标签 android ios data-sharing

设置

我有原生的 iOS 和 Android 应用程序,可以与我的网络服务器同步数据。应用程序的一个要求是它们可以离线工作,因此数据存储在 sqlite 数据库中的应用程序上。

应用程序通过一系列 REST 调用与服务器通信,这些调用从服务器发送 JSON 供应用程序存储在它们的数据库中。

我的问题

这个数据的规模非常大,有些表可以有百万条记录,而手机数据库的最终大小可以接近 100mb。

REST 端点必须限制其数据,并且必须使用不同的偏移量多次调用才能实现整个同步。

所以我正在寻找提高这个过程效率的方法。

我的想法

我的想法是创建一个在服务器上运行的脚本,该脚本将从服务器数据库创建一个 sqlite 文件,将其压缩并将其放在某个地方供应用程序下载。有效地创建服务器当前数据的快照。

应用程序将下载此快照,但仍必须调用它们的 REST 方法,以防快照发生后发生变化。

问题

这会为我的网络应用程序增加另一层复杂性,我想知道这是否是正确的方法。人们在同步大量数据时是否使用其他技术?

最佳答案

这是一个复杂的问题,因为答案应该取决于您的限制:

  1. 数据多久更改一次?如果太频繁,那么快照将很快过时,因此应用程序将有效地大量更新数据。此外,对于大量数据,应用程序会在同步上浪费 CPU 时间(即使用户没有主动使用所有这些数据!),或者可能会很快与服务器不同步 - 这对于 iOS 尤其如此与 Android 应用程序相比,应用程序的后台功能非常有限(只有小窗口,受到限制)。

  2. 该数据库是只读的吗?您正在向服务器发送更新吗?如果是这样,那么您需要准备冲突解决技术和案例,其中数据被修改,但不会立即发布到服务器。

  3. 您需要支持数据库方案更改时的情况。实际上,在您的方法中,您需要为不同版本的应用程序准备好多个(初始)数据库。

如果没有对数据库进行太多更新并且常规下载方式效率不高(这就是您通常描述的:通过多个 REST 调用发送数百万条记录非常痛苦),您的想法很好。

但是,谨防撞墙:如果数据变化很大,并且您被迫每天在每台设备上更新数万/数十万条记录,那么您可能需要考虑一种完全不同的方法:一个这可能需要您的应用程序仅支持部分离线模式(对于最近/重要的项目)或数据模型的混合方法(因此在用户想要编辑某些内容时对最新数据执行实时请求)。

关于android - 在移动应用程序和网络服务器之间同步大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51211660/

相关文章:

c++ - 在 C++ 中共享键值对的最佳方式

不同大小和语言的Android图片

android - 从应用程序上下文开始的服务或 Activity 与 Activity 上下文

ios - Prepare for segue 是自动调用的

ios - 添加单元测试时 Mach-O 链接器错误 - XCode

ios - 无法启动 UICollectionViewController

iOS 8 用户之间的数据共享

excel - 当你不是一名程序员时,在公司工作场所你会改用什么来代替 excel?

Android EditText布局宽度全尺寸

android - 始终在 Root设备上以根用户身份运行 adb