sidekiq方法在sqlite3数据库中存储一些数据,而不是redis?

时间:2013-09-26 17:49:13

标签: ruby-on-rails database sidekiq

我目前正在开发一个rails项目,我被要求保存sidekiq worker的进度并存储它,因此使用该应用程序的用户可以看到进度。现在我面对这个困境,最好是写出文本文件或将其保存在数据库中。

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

类YourWorker       包括Sidekiq ::工人

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

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

2 个答案:

答案 0 :(得分:1)

您的主题标题表示数据是非结构化的,但您的问题描述表明数据应该是结构化的。这是什么?速度并不总是最重要的考虑因素,在您的情况下似乎并不重要。最重要的考虑因素是如何使用您的数据。您的数据在未来的使用方式会改变吗?通常,具有适当模型的数据库是更好的答案,因为它允许灵活地满足未来的要求。它还允许其他客户访问您的数据。

答案 1 :(得分:0)

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

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

然后,当您对某些内容进行排队时,您需要创建一个新的Job并将id的{​​{1}}传递给Jobperform

perform_async

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

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