问题描述
我打算在后端使用rxdb + hasura / postgresql。例如,我在读this rxdb page,但实际上需要可同步实体具有deleted
标志。
第一季度(主要问题)
- 是否有任何个点可以最终硬删除?必须满足什么条件-例如,我可以简单地使用“ X个月以上”,然后强制我的应用仅显示X个月以下的数据吗?
- 这样的硬删除(如果可能的话)最好直接在中央数据库中执行,因为这将成为事实的源头?客户端是否会有我没有预见/理解的影响?
我预计deleted
的数量在我的应用程序中迅速增长,我不想永远存储所有这些额外数据。
第二季度(奖金/好奇)
- 需要“已删除”标志的(算法)基础是什么?是不是仅从一个非常大的列表中检查一个标志,而不是检查一个对象的遗漏,才更快。如果这是一个愚蠢的问题,我深感抱歉:(
解决方法
最终,这取决于您的特定业务/产品所决定的决定,该决定涉及您要在系统中保留删除的实体多长时间。对于某些应用程序,重要的一点是始终保留已删除内容的历史记录,甚至对作为一种分类帐或历史记录存储的记录进行单独修订。您必须对要删除的实体保留多长时间做出判断。
如果您还没有的话,我建议您还添加一个deleted_at
列,然后可以轻松地利用Hasura的新Scheduled Triggers functionality之类的工具来执行重复性作业,该作业会完全删除早于无论您的门槛是多少。
您还可以利用Hasura的权限系统来确保已删除的行不会返回给客户端。 documentation and examples提供了使用软删除和Hasura的方法
对于第二个问题,检查记录中的已删除标志肯定比尝试对整个数据集进行比较以查找现在缺少的东西要快得多。