数据库同步 Cloud 从 MySql 到 Sqlite Android
Database Sync Cloud from MySql to Sqlite Android
我有一个可以随时更改的远程数据库。我需要找到一种方法,让我的 sqlite 数据库以更好和优化的方式更新所有更改。
我认为每个 table 有一个时间戳并且只发送更新的 table 到客户端是一个解决方案,或者可能每行有一个时间戳并且只发送更新的行到客户..
但是
- 例如,我如何管理已删除的项目?
- 我如何管理 Android 上的技术更新?
基本上,简而言之,在应用程序的某个时刻,我需要使用 API 下载更改并更新本地数据库。
有人有什么想法吗?
谢谢
既然这似乎是一种单向同步,我会:
使服务器数据库上的每个 table 都有一个 UUID 列和最后一个
更新了 date/time 列。
创建将请求更新数据的 REST 调用。理想情况下,它会
花时间更新客户端。这个日期应该来自
更新调用期间的服务器。
服务器将扫描每个 table 搜索日期大于已过日期的行。序列化数据并return它作为JSON连同服务器date/time用于下一个请求。
现在跟踪删除需要更多工作。您可以:
- 永远不要删除数据,只将行标记为已删除,这是最简单的方法,但根据您的数据,数据库中最终可能会有很多行。
- 删除数据,然后在另一个 table 中跟踪删除的行。这些可以在一段时间后删除,if/when 所有客户端都已更新。
- 进行第二次更新调用,将下推每行的所有 UUID 值和时间戳。然后客户端可以找出需要删除的行。
虽然它是最复杂的,但我可能会选择选项 3,因为我不喜欢旧数据四处闲逛。我要走的方向也取决于有多少客户端将与数据库同步。
我决定采用另一种方法:
我创建了一个 api 将 Mysql 数据库解析为服务器端的 SQLITE 数据库。有一个 "last_update_timestap" 会在每次更改内容时更新。
另一个 api 调用,在 header 中提供一个包含该时间戳的额外字段。
在客户端有一个同步进程,在需要时执行以下操作:
Api 调用仅检索 HEADER,获取最后更新时间戳并检查是否需要更新;
如有需要请从对方下载数据库api
- 将数据库写成一个临时文件,将临时文件复制到与真实数据库同名的位置
- 使用数据库
感谢大家的帮助,但事实证明这是适合我的项目结构的方法。
我有一个可以随时更改的远程数据库。我需要找到一种方法,让我的 sqlite 数据库以更好和优化的方式更新所有更改。
我认为每个 table 有一个时间戳并且只发送更新的 table 到客户端是一个解决方案,或者可能每行有一个时间戳并且只发送更新的行到客户..
但是 - 例如,我如何管理已删除的项目? - 我如何管理 Android 上的技术更新?
基本上,简而言之,在应用程序的某个时刻,我需要使用 API 下载更改并更新本地数据库。
有人有什么想法吗?
谢谢
既然这似乎是一种单向同步,我会:
使服务器数据库上的每个 table 都有一个 UUID 列和最后一个 更新了 date/time 列。
创建将请求更新数据的 REST 调用。理想情况下,它会 花时间更新客户端。这个日期应该来自 更新调用期间的服务器。
服务器将扫描每个 table 搜索日期大于已过日期的行。序列化数据并return它作为JSON连同服务器date/time用于下一个请求。
现在跟踪删除需要更多工作。您可以:
- 永远不要删除数据,只将行标记为已删除,这是最简单的方法,但根据您的数据,数据库中最终可能会有很多行。
- 删除数据,然后在另一个 table 中跟踪删除的行。这些可以在一段时间后删除,if/when 所有客户端都已更新。
- 进行第二次更新调用,将下推每行的所有 UUID 值和时间戳。然后客户端可以找出需要删除的行。
虽然它是最复杂的,但我可能会选择选项 3,因为我不喜欢旧数据四处闲逛。我要走的方向也取决于有多少客户端将与数据库同步。
我决定采用另一种方法:
我创建了一个 api 将 Mysql 数据库解析为服务器端的 SQLITE 数据库。有一个 "last_update_timestap" 会在每次更改内容时更新。
另一个 api 调用,在 header 中提供一个包含该时间戳的额外字段。
在客户端有一个同步进程,在需要时执行以下操作:
Api 调用仅检索 HEADER,获取最后更新时间戳并检查是否需要更新;
如有需要请从对方下载数据库api
- 将数据库写成一个临时文件,将临时文件复制到与真实数据库同名的位置
- 使用数据库
感谢大家的帮助,但事实证明这是适合我的项目结构的方法。