android - 跟踪移动本地数据库和可选云数据库之间的已删除条目

标签 android ios sqlite google-cloud-firestore

我正在开发一个移动应用程序,其主要功能是让用户在其中执行大量 CRUD(创建、读取、更新和删除)任务。

该应用程序的数据主要存储是本地sqlite数据库,但用户可以选择注册帐户并使用云数据库备份数据。

此应用程序需要能够离线和在线工作。用户应该能够使用包含相同数据的多个设备。

目前,在我的所有 sql 表中,我有 3 个额外的列来跟踪数据库中的哪些条目已同步:createdAt(datetime)、updatedAt(datetime) 和synced(boolean)。 这样我就可以跟踪哪些条目是最新的,并相应地更新本地或云数据库。

我使用 Cloud Firestore 作为云,在我的情况下使用其离线功能并不是一个可行的选择。

我的问题是;在应用程序能够与云同步之前跟踪已删除的条目时,哪种解决方案是最好的?

解决此问题的一个想法是拥有一个表,其中包含已删除条目的所有 ID 以及它所属的表,然后当应用程序能够同步时;删除本地数据库(所有设备上)和云数据库上的这些条目。 我对这个解决方案的问题是,这个“删除”表很快就会变得巨大,并且从该表中删除条目将是一个问题,因为在删除之前需要所有用户的设备都是最新的,并且在用户放弃其中一台设备的情况下,这意味着该设备永远不会同步,从而导致条目不会从“删除”表中删除。

对于跟踪已删除条目的可靠方法,您有何建议?

最佳答案

我认为没有一个解决方案可以同时满足这两个目标:

  1. 不要将已删除的项目永远保留在数据库中
  2. 确保删除内容在所有设备之间永久同步

所以你必须决定放弃哪一个。你的想法满足2但不满足1。满足1但不满足2的解决方案是在一段时间(可能是六个月)后删除删除记录。一种变体是删除记录时,不是实际删除它,而是将其标记为已删除(以及删除日期),并且如果适用,从记录中删除任何大块数据。在您决定的宽限期之后,记录实际上可以被删除。不利的一面是,如果将封存的设备取出,它可能会恢复以前删除的记录。

关于android - 跟踪移动本地数据库和可选云数据库之间的已删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54872586/

相关文章:

ios - Flutter 不断为 iOS 导入旧版本的 Plugin

ios - 如何在 swift 中使用 alamofire 将任何文件上传到服务器

同一字段上的 SQL 双 SELECT(mysql 或 sqlite3)

Android:View类中getTag()和setTag()的用途

android - 在 YouTube 工作室中打开视频的正确链接是什么?

ios - 如何在 Xcode 8.2 中使用 Swift 3.0 创建和存储包含数据的托管对象

c# - System.Data.SQLite 有多稳定

sqlite - 在SQLite 3中删除行并引用另一个表中的行

android - TIME_TICK 会在深度 sleep 中广播吗?

android - 除了适配器之外,还有其他方法可以将数据实现到 Activity 中吗?