android - 跟踪移动本地数据库和可选云数据库之间的已删除条目
问题描述
我正在开发一个移动应用程序,主要功能是让用户在其中执行大量 CRUD(创建、读取、更新和删除)任务。
App 的主要数据存储是本地的 sqlite 数据库,但用户可以选择注册一个帐户并使用云数据库来备份他们的数据。
此应用程序需要能够离线和在线工作。并且用户应该能够使用包含相同数据的多个设备。
目前在我的所有 sql 表中,我有 3 个额外的列来跟踪数据库中的哪些条目是同步的:createdAt(datetime)、updatedAt(datetime) 和 synced(boolean)。有了这个,我可以跟踪哪些条目是最新的,并相应地更新本地或云数据库。
我将 Cloud Firestore 用作云,在我的情况下,使用它的离线功能不是一个可行的选择。
我的问题是;在应用程序能够与云同步之前跟踪已删除条目时,哪种解决方案最好?
解决方案的一个想法是有一个表,其中包含已删除条目的所有 ID 以及它所属的表,然后当应用程序能够同步时;删除本地数据库(在所有设备上)和云数据库上的这些条目。我对这个解决方案的问题是,这个“删除”表很快就会变得很大,从这个表中删除条目将是一个问题,因为在删除之前需要所有用户的设备都是最新的,并且在用户放弃了他的一个设备的情况下,这意味着该设备将永远不会同步,从而导致条目不会从“删除”表中删除。
对于跟踪已删除条目的可靠方法,您有什么建议?
解决方案
我认为没有一个解决方案可以同时满足这两个目标:
- 不要将已删除的项目永远保留在数据库中
- 确保删除在所有设备之间永远同步
所以你必须决定放弃哪一个。您的想法满足 2 但不满足 1。满足 1 但不满足 2 的解决方案是在一段时间后删除删除记录,可能是六个月。一种变化是删除记录时,而不是实际删除它,只是将其标记为已删除(以及删除的日期),并且如果适用,从记录中删除任何大块数据。在您决定的任何宽限期之后,实际上可以删除记录。不利的一面是,如果将封存的设备带回来,它可以恢复以前删除的记录。
推荐阅读
- javascript - 如何通过深度链接使用 React Navigation 获取组件中的 URI?
- git - Make branch point to the tip of the branch that originated it
- cmake - How to use Qt Creator as a smart editor?
- javascript - Updating property when promise is resolved
- docker - 使用 docker-compose 在 Dockerfile 中运行 echo 失败
- android - BindingAdapter doesn't work with DataBinding
- hyperledger-fabric - 创建频道时出现此错误?
- java - mXParser 导数给出 NAN
- responsive - Firefox 开发者版 (63) 在响应模式下检查元素时不再显示 css 规则
- java - 如何在Java中找到图像的阈值?