Ruby App中的DataMapper数据库池

时间:2013-01-29 23:48:12

标签: mysql ruby ruby-datamapper

我正在编写一个多线程Ruby应用程序,它通过dm-sweatshop生成数据并将其加载到遗留MySQL数据库中,以便在负载测试中使用。一切正常,只有一个例外,我正在加载数百万条记录,但我似乎无法增加数据库连接池的大小以更快地完成任务。它似乎停留在10个连接处。我已经尝试增加应用程序本身的线程池大小,但是看着MySQL,我似乎无法建立超过10个连接。

我最初只是使用URL进行DataMapper设置:

DataMapper.setup(:default, 'mysql://user:password@db-server/testing')

但我已经转到此尝试设置数据库池大小:

DataMapper.setup(:default, {
  :adapter  => 'mysql',
  :pool     => 20,
  :host     => 'db-server',
  :database => 'testing',
  :username => 'user',
  :password => 'password'
})

如何增加泳池大小?我觉得我已经倾倒了我可以在DataMapper上找到的每个RDoc和文档,但我找不到如何做到这一点。我现在已经切换到ActiveRecord来完成这项工作,但它不支持复合主键,这是我对这个传统数据库所需要的。

作为参考,我正在利用'thread / pool'gem进行多线程,应用程序在Ruby 1.9.3中运行。以下是我在多个线程中使用DataMapper的方法:

pool = Thread::Pool.new(@config[:thread_pool_size])
...
10000.times { pool.process {Customer.gen} }
...
pool.shutdown
sleep 5
puts "DONE!"

1 个答案:

答案 0 :(得分:1)

考虑到这个问题非常陈旧并且不再维护DataMapper它已经过时了,但为了完整起见:DataMapper使用的是硬编码池大小8而忽略了配置。

另请参阅:Datamapper & connection pool logic