我正在使用 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/