代码之家  ›  专栏  ›  技术社区  ›  MatthieuP

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

  •  2
  • MatthieuP  · 技术社区  · 15 年前

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

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

    出于法律/合同原因,我们还必须能够在给定的期限内撤销其账户/内容,并在另一期限内将这些数据提供给司法机关。

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

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

    • “多表”:对于每个表,我们创建第二个具有相同模式的表,再加上两个额外字段(日期删除,原因)。这些额外的字段用于知道数据是否仍然可用于恢复、何时删除以及为什么/如何首先删除。这个版本只比以前的版本好一点,但是在表增长的时候,性能也非常糟糕。此外,您还必须更改一些表的模式(即:删除唯一约束),这使得新开发人员、管理员很难理解/升级系统…以及精神健康的人。

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

    我必须承认,这些方法中没有一种能让我满意,即使它们能处理一定数量的数据。我也曾设想过,我们可以删除数据库中的一些关键行,让其余的行不一致(并计划进行更可控的删除作业),但这让我害怕……

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

    任何意见都将受到高度赞赏!

    1 回复  |  直到 15 年前
        1
  •  3
  •   Mork0075    15 年前

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