14

我希望能够在 HTML5 (iPad) 网络应用程序中执行以下操作:

  • 将数据上传到在线数据库(如果我要使用 SQLite 之类的东西构建在线数据库,其大小可能小于 50Mb)
  • 将数据的子集或完整副本提取到离线 Web 数据库
  • (出行超出3G网络覆盖范围)
  • 对下载的数据执行一堆分析类型的计算
  • 将我的计算参数保存到离线网络数据库
  • 重复,为几个不同的离线分析型计算会话保存不同的参数集在较长时间内
  • (返回有 3G 网络覆盖的区域)
  • 将保存的参数从我的离线网络数据库同步到中央在线数据库

直到最后一步,我对每一步都很满意......

我正在尝试查找有关是否可以将离线 Web 数据库与中央数据库同步的信息,但找不到任何涵盖该主题的内容。是否有可能做到这一点?如果是这样,您能否提供有关它的信息的链接,或者描述它如何足够详细地为我的特定应用程序实现它?

提前致谢

4

4 回答 4

6

我没有专门使用 HTML5 本地数据库,但我使用过需要离线更新和重新同步到中央数据存储的移动设备。

无论数据集是在服务器上还是在离线客户端上创建的,我都确保它的主键是 UUID。我还确保每次更新记录时都为其打上时间戳。

我也不知道上次离线客户端同步的时间。

因此,当重新同步到中央数据库时,我首先在离线客户端查询自上次同步以来发生更改的记录。然后我查询中央数据库以确定自上次同步以来这些记录中是否有任何更改。

如果它们在中央数据库上没有改变,我会用来自离线客户端的数据更新它们。如果服务器上的记录自上次同步以来发生了变化,我会将它们更新到客户端。

如果 UUID 在中央服务器上不存在但在离线客户端上存在,我将其插入,反之亦然。

为了清除记录,我创建了一个“清除”列,当运行 sysnc 查询时,我从每个数据库中删除记录(或将其标记为非活动,具体取决于应用程序要求)。

如果自上次更新以来两条记录都发生了变化,我必须依靠用户输入来协调或指定哪个记录“获胜”的规则。

我通常不信任内置的数据库导入功能,除非我正在导入一个完全空的数据库。

于 2011-04-11T17:44:16.543 回答
1

脚步:

  1. 保留本地数据库上的更改列表。
  2. 连接到远程数据库时,检查自上次远程同步以来的任何更改。
  3. 如果远程端的更改与本地更改发生冲突,请告知用户如何处理。
  4. 对于所有其他更改,请继续同步:
    1. 下载所有未在本地更改的在线更改。
    2. 上传所有未远程更改的本地更改。

如果一侧有数据转换器,此方法实际上可以在任何数据库组合上工作。

于 2011-03-12T08:57:58.737 回答
0

HTML5 支持浏览器 db SQLite ,我在 Mozilla 和 chrome 中试过,效果很好。我还有一个需求,我有一些离线表单,用户点击数据并点击保存,它保存在本地浏览器数据库中,稍后当用户与服务器同步或上线时,他可以点击实际同步数据的同步按钮从浏览器数据库任何其他数据源。

于 2014-04-11T16:55:06.893 回答
0

从我访问过的几个站点来看,我认为(只要您将 SQLite 用于您的服务器数据库)应该是可能的。

HTML5 网络数据库也使用 SQLite(尽管并非所有浏览器都支持它,而且 W3C 似乎已经放弃了对它的支持)

所以...

如果您使用 .dump 命令导出数据,然后使用 $sqlite mydb.db < mydump.sql 语法将数据导入网络数据库,您应该能够通过 php 或 java 后端的一些烦躁来做到这一点?

然后,当您想将“离线”数据同步到您的服务器时,只需从 web 数据库执行相反的转储到 dump.sql 文件并导入到服务器数据库

该站点解释了从 SQLite 转储导出和导入

来源:转储和恢复 SQLite 数据库

于 2011-01-28T16:37:19.113 回答