ruby-on-rails – 使用后台任务软删除庞大的用户帐户

我正在使用Rails并设计一个能够在用户上存储大量数据的应用程序.我希望用户能够停用他的帐户,类似于Facebook的方式,这样如果您重新登录,您的帐户就会重新激活.到目前为止,我已经使用软删除解决了这个问题.问题是,当人们删除他们的帐户时,需要软删除的数据太多,需要一段时间才能运行.当然,我的本能就是使用delayed_job.但问题是,这只适用于帐户删除,而不适用于重新激活.我不希望我的用户在恢复所有数据的同时不得不坐10秒钟,但我也不能在后台执行此操作,因为他们将在他们的任何数据被删除之前重新登录恢复.

关于如何解决这个问题的任何想法?

提前致谢!

最佳答案 您需要将soft_delete设置为在所有相关记录上作为布尔标志进行跟踪.将默认范围设置为仅返回未设置标志的记录.当需要激活或停用时,收集所有相关记录并使用update_all命中它们.这是一个针对13,000个用户记录的示例,为您提供时间感和时间感.性能:

1.9.2p320 :001 > User.update_all(soft_deleted: false)
  SQL (1016.3ms)  UPDATE "users" SET "soft_deleted" = 'f'
 => 13350 

如你所见,它在所有13,000条记录中用该标志切换大约一秒钟.所以,如果你想点击一个用户,所有用户的帖子,以及所有用户的私人消息,

User.update_attributes(soft_deleted: true)
User.posts.update_all(soft_deleted: true)
User.private_messages.update_all(soft_deleted: true)

你应该好好去.如果您正在处理如此多的记录,即使这种技术表现不佳,我也不认为您会有太多选择,除非告诉用户可能需要一段时间才能获得所有数据.重新激活并将整个过程投入到后台工作中,就像您最初计划的那样.

点赞