Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite数据库的高效同步——自动分块与来自web服务的提示?_Android_Web Services_Synchronization_Data Synchronization - Fatal编程技术网

Android SQLite数据库的高效同步——自动分块与来自web服务的提示?

Android SQLite数据库的高效同步——自动分块与来自web服务的提示?,android,web-services,synchronization,data-synchronization,Android,Web Services,Synchronization,Data Synchronization,摘要:有什么众所周知的方法来对数据进行分组以进行同步吗?块被认为是单独传输的数据块 这可能是一个相当广泛的问题。根据建议,我将开始更专业的话题 我将设计/编写用于将Android平板电脑数据库(SQLite)与通过web服务访问的中央数据库同步的代码。该机制应反映以下事实: 它将用于各种应用。应用程序要相当简单。无论如何,它们应该主要在离线状态下工作 数据量可以从小到大(达到平板电脑的技术极限) web服务实现可能依赖于客户(即,应用程序不得要求重写web服务;例如,可能存在保留SOAP而不强制

摘要:有什么众所周知的方法来对数据进行分组以进行同步吗?块被认为是单独传输的数据块

这可能是一个相当广泛的问题。根据建议,我将开始更专业的话题

我将设计/编写用于将Android平板电脑数据库(SQLite)与通过web服务访问的中央数据库同步的代码。该机制应反映以下事实:

  • 它将用于各种应用。应用程序要相当简单。无论如何,它们应该主要在离线状态下工作
  • 数据量可以从小到大(达到平板电脑的技术极限)
  • web服务实现可能依赖于客户(即,应用程序不得要求重写web服务;例如,可能存在保留SOAP而不强制REST的历史原因)
  • 在某些情况下,可以为应用程序创建特定的新web服务(在客户站点使用相同的技术)
  • 问题的核心是如何最小化同步期间移动的数据的大小。问题不在于如何实现异步下载。(我正在研究Virgil Dobjanschi在中介绍的实现技术。)

    到目前为止,我已经找到了以下基本方法(不是按特定顺序):

  • 暴力处理少量数据,即接收/发送所有数据,在目标端解决差异(下载时在平板电脑上,上载时在远程服务器上)。这里(比如说)整个数据库表可以看作是最大可能的数据块
  • 使用数据记录的修改日期(时间戳),并根据上次同步的记忆日期仅同步较新的记录。这与添加和修改的记录一样好;但是,必须对删除的记录使用一些传统的机制。在这里,单个记录可以被视为最小可能的数据块
  • 以上是针对单个数据块的同步。更现实的情况需要对更多的记录进行分块。在这里,我认为块是可以单独传输的数据块。当传输失败时(即由于各种原因离线),只有失败的数据块和未传输的数据块必须同步

    我很清楚的是,数据块应该有一定的大小(形成一个数据块,比如说10 kB左右)

    为了降低通信成本,构造的区块包应该保持不变,直到区块的某些记录发生更改、添加或删除。无论区块是在中央服务器端还是在平板电脑设备上构建,都应该独立地将其构建为相同的区块

    其他块不应受到包含更改数据的块的影响。这样,假设可以为两侧的每个块计算SHA摘要,并且可以很容易地找到应该同步的块

    有没有关于如何确定块的标准技术、论文和示例

    感谢

    在我们的框架(开源)中,我们走了以下路线:每个对象的状态信息是一个不透明字段(可以使用数据的时间戳或散列,也可以使用一些独特的标记,这由开发人员决定)。同步核心将此字段的值与保存的状态进行比较,然后决定是否需要上载、下载、删除对象等

    这种方法要求在同步后保存状态(框架允许您保存状态),并将其用作下一次同步期间检测更改的基础

    我欢迎您检查Rethync,因为它正是您现在正在实现的