总结:有什么众所周知的技术可以将数据分块以进行同步吗?块被认为是单独传输的数据块。
这可能是一个相当广泛的问题。收到建议后,我将开始更专业的话题。
我将设计/编写用于将 Android 平板电脑数据库 (SQLite) 与通过 Web 服务访问的中央数据库同步的代码。该机制应反映以下事实:
- 它将用于应用范围。应用程序相当简单。无论如何,他们应该主要离线工作。
- 数据量可以从小到大(达到平板电脑的技术限制)。
- Web 服务实现可能依赖于客户(即应用程序不得要求重写 Web 服务;例如,保留 SOAP 而不是强制 REST 可能有历史原因)。
- 在某些情况下,可以为应用程序创建特定的新 Web 服务(在客户站点使用相同的技术)。
问题的核心是如何最小化同步期间移动的数据大小。问题不在于如何实现异步下载。(我正在考虑 Virgil Dobjanschi 在开发 Android REST 客户端应用程序中介绍的实现技术。)
到目前为止,我已经找到了以下基本方法(不按特定顺序):
- 少量数据的蛮力,即接收/发送所有内容,解决目标端的差异(下载时在平板电脑上,上传时在远程服务器上)。这里(比如说)整个数据库表可以看作是最大可能的数据块。
- 使用数据记录的修改日期(时间戳),并根据上次同步时记住的日期仅同步较新的记录。对于添加和修改的记录,这很好;但是,对于删除的记录,必须使用一些额外的机制。这里可以将单个记录视为可能的最小数据块。
以上是用于同步单个数据块的。更现实的情况需要对更多记录进行分块。这里我认为块是可以单独传输的数据块。当传输失败(即由于各种原因离线)时,只有失败和未传输的块必须同步。
对我来说很清楚的是块应该有一定的大小(形成一个数据块,比如说大约 10 kB)。
为了降低通信成本,构建的块包应该保持不变,直到块的某些记录发生变化、添加或删除。无论是在中央服务器端还是在平板设备上构造块,都应该独立地构造相同的块。
其他块不应受到包含更改数据的块的影响。这样,假设可以为两侧的每个块计算 SHA 摘要,并且可以很容易地找到应该同步哪些块。
是否有任何关于如何确定块的标准技术、论文、示例?
谢谢