ruby-on-rails - 如何使用线程池写入我的数据库?

标签 ruby-on-rails ruby multithreading activerecord thread-safety

我正在使用 https://github.com/meh/ruby-thread 中讨论的线程池产生多个下载器。

我正在尝试下载许多 RSS 提要的内容,总共将近 200K 个提要,但在调用 ActiveRecord 的 save 方法时,我的 MySQL 数据库中出现锁定和并发问题。

我很确定我需要指定一个线程来与数据库交互并向该线程发送信号,但我不确定如何构建它。

最佳答案

看看 Ruby 的 Queue类(class)。

创建一个队列,用于在将数据发送到数据库之前保存记录信息。您所有的 RSS 线程都以“生产者”的身份写入它。

创建一个新线程,它只从该队列中读取并作为“消费者”写入数据库。保持领先于 RSS 线程应该没有问题。

您需要将主代码加入到所有线程,包括数据库消费者,以便所有线程在应用程序退出之前完成,否则您可能会得到未写入的记录。

由于您没有显示源代码,因此我们无法帮助您集成它,但应该很容易做到。

关于ruby-on-rails - 如何使用线程池写入我的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17250767/

相关文章:

ruby-on-rails - Rails 关联模型未在数据库中更新

php - 过滤表格的正则表达式

jsp/servlet 应用程序中的 java 方法和竞争条件

Java 同步计数器未按预期工作

ruby-on-rails - 使用 Elastic Search gem 运行 jruby 应用程序。

ruby - 使用 gulp 运行 compass 任务会导致 LoadError

ruby-on-rails - rake db migrate 的版本是什么

java使用线程下载多个文件

ruby-on-rails - 如何在父模型的验证错误后显示嵌套表单验证错误?

ruby-on-rails - Rails : Is there any way to save a whole *. html.erb 到@Var?