0

我目前正在开发一个 Rails 项目,我被要求保存 sidekiq 工作人员的进度并将其存储,以便使用该应用程序的用户可以看到进度。现在我面临着这个困境,是写出文本文件还是保存在数据库中更好。

如果是数据库,那么如何将它保存在模型对象中。我知道我们可以通过将信息发送到日志文件来存储工人的进度。

类 YourWorker 包括 Sidekiq::Worker

  def perform
  logger.info { "Things are happening." }
  logger.debug { "Here's some info: #{hash.inspect}" }
  end

因此,如果我想将工作人员的进度保存在数据模型中,那该怎么做?

4

2 回答 2

1

您的线程标题说数据是非结构化的,但您的问题描述表明数据应该是结构化的。它是哪一个?速度并不总是最重要的考虑因素,在你的情况下它似乎不是很重要。最重要的考虑因素是您的数据将如何被使用。您的数据在未来的使用方式会发生变化吗?通常,具有适当模型的数据库是更好的答案,因为它为未来的需求提供了灵活性。它还允许其他客户端访问您的数据。

于 2013-09-26T18:13:31.580 回答
0

您可以创建一个Job类,然后更新当前工作作业的某些属性。

class Job < ActiveRecord::Base
  # assume that there is a 'status' attribute that is defined as 'text'
end

然后,当您排队要发生的事情时,您会创建一个新的并Job传递to或。idJobperformperform_async

job = Job.create!
YourWorker.perform_async job.id

然后在您的工作人员中,您将收到要处理的工作的 ID,然后检索并更新该记录。

def perform(job_id)
  job = Job.find job_id
  job.status = "It's happening!"
  job.save
end
于 2013-09-27T03:38:58.150 回答