Java 如何在博客应用程序上有效地取消发布特定用户的所有数据?

Java 如何在博客应用程序上有效地取消发布特定用户的所有数据?,java,mysql,performance,Java,Mysql,Performance,我们开发并运行一个博客应用程序,其中用户数据分散在许多表中: -博客 -文章 -评论 -消息 -Trackback -其他50张桌子 用户可以关闭他们的帐户,他们的帐户/内容必须立即从网站上消失 出于法律/合同原因,我们还必须能够在给定的期限内取消删除他们的帐户/内容,并在另一个期限内将这些数据提供给司法当局 多年来,在不同的应用中,我们采用了不同的方法: “已删除”标志无处不在:每个表都有一个“已删除”列,在删除/恢复数据时更新该列。非常讨厌,因为它会减慢每个列表生成查询的速度,在删除/恢复

我们开发并运行一个博客应用程序,其中用户数据分散在许多表中:
-博客
-文章
-评论
-消息
-Trackback
-其他50张桌子

用户可以关闭他们的帐户,他们的帐户/内容必须立即从网站上消失

出于法律/合同原因,我们还必须能够在给定的期限内取消删除他们的帐户/内容,并在另一个期限内将这些数据提供给司法当局

多年来,在不同的应用中,我们采用了不同的方法:

  • “已删除”标志无处不在:每个表都有一个“已删除”列,在删除/恢复数据时更新该列。非常讨厌,因为它会减慢每个列表生成查询的速度,在删除/恢复时会创建大量更新。此外,它不处理上述两阶段删除。事实上,我们从未使用过这个,但值得一提的是:)

  • “多表”:对于每个表,我们创建第二个具有相同模式的表加上两个额外字段(dateDeleted,reason)。额外字段用于了解数据是否仍可用于恢复,何时删除,以及为什么/如何删除。这个版本只是比上一个版本稍微好一点,但在表不断增长的情况下,性能也会非常糟糕。此外,您还必须更改某些表的模式(即:删除唯一约束),这使得新开发人员、管理员更难理解/升级系统。。。以及一般精神健康的人

  • “Multi-DB”:与以前相同的方法,但我们将数据移动到不同的数据库集群上,这样可以在不影响“最终用户”数据库的情况下浏览这些数据。此外,对于这个应用程序,唯一性约束是在java级别完成的,因此所有模式都是相同的。最后,双数据保留约束是通过为每个约束指定一个专用的DB来实现的,这使事情变得更容易

我必须承认,这些方法都不能让我满意,即使它们可以处理一定数量的数据。我还想象过,我们可以删除数据库中的一些关键行,让其余的不一致(并安排一个更受控制的删除作业),但这让我害怕

你知道做同样事情的其他方法吗,保持相同的功能级别(我们可以调整两个持续时间以简化问题)?我没有为我现有的应用程序寻找解决方案,但希望改进下一个应用程序


如有任何意见,我们将不胜感激

每个资产(博客、评论等)都依赖于用户。我会给用户表一个列“active”,它是0或1,然后实现一个功能,在每个查询中询问不同资产的“user active”?尝试使用indizes或类似的方法优化此查找。在我看来,这是最干净的方式。在此之后,您可以实现一个作业,该作业对禁用时间超过x天的用户运行级联删除

我猜一些资产也会依赖于blog对象,但我明白了。谢谢!