通过MySQL Client用命令:show processlist发现数据库连接数量一直居高不下,轻轻松松就上2k+的连接。通过读Rails框架的connection_pool.rb文件代码,发现在各模型中用establish_connection连接数据库会造成很大的问题。文件中类ConnectionHandler的establish_connection方法代码如下:Ruby代码 def establish_connection(name, spec) @connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec) end def establish_connection(name, spec)
@connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec)
执行SQL语句require "dbi"
dbh = DBI.connect("DBI:ODBC:#{db_name}",@user,@password)
sth = dbh.execute(%%1)
提取单条记录
# @database is array of references to anonymous hashes
@database = (
{ name =>"Wild Ginger",
city =>"Seattle",
cuisine =>"Asian Thai Chinese Korean Japanese",
expense =>4,
music =>"\0",
meals =>"lunch dinner",
view =>"\0",
smoking =>"\0",
parking =>"validated",
rating=>4,
payment =>"MC VISA AMEX",
},
# { ... }, etc.
)
sub findRestaurants {
my ($database, $query) = @_
return grep {
$query->{city} ?
lc($query->{city}) eq lc($_->{city}) : 1
and $query->{cuisine} ?
$_->{cuisine} =~ /$query->{cuisine}/i : 1
and $query->{min_expense} ?
$_->{expense} >= $query->{min_expense} : 1
and $query->{max_expense} ?
$_->{expense} <= $query->{max_expense} : 1
and $query->{music} ? $_->{music} : 1
and $query->{music_type} ?
$_->{music} =~ /$query->{music_type}/i : 1
and $query->{meals} ?
$_->{meals} =~ /$query->{meals}/i : 1
and $query->{view} ? $_->{view} : 1
and $query->{smoking} ? $_->{smoking} : 1
and $query->{parking} ? $_->{parking} : 1
and $query->{min_rating} ?
$_->{rating} >= $query->{min_rating} : 1
and $query->{max_rating} ?
$_->{rating} <= $query->{max_rating} : 1
and $query->{payment} ?
$_->{payment} =~ /$query->{payment}/i : 1
} @$database
}