Sequel 连接池中的多个连接
Multiple connections in a Sequel Connection pool
我在 Rails 应用程序上有一个 Ruby,用户连接到与 config/database.yml 中设置的数据库不同的数据库。可能的数据库连接存储在数据库中的 table 中。通过在 ActiveRecord 模型
上调用 establish_connection(connection_config)
为每个请求设置数据库连接
我尝试使用以下代码对 Sequel 做一些类似的事情
def self.establish_sequel_connection group
found = Sequel::DATABASES.find { |db| database_equal_group? db, group }
found || connect_to_group(group)
end
def self.connect_to_group(group)
db = Sequel.connect(
adapter: 'postgres', host: group['host'], database: group['database'],
user: group['username'], password: group['password']
)
if Rails.env.development?
db.sql_log_level = :info
db.loggers.push(Logger.new($stdout))
end
db
end
def self.database_equal_group?(db, group)
db[:host] == group[:host] && db[:database] == group[:database]
end
当我多次使用 Sequel.connect 时,我看到多个数据库 我看到在 PgAdmin 4 中创建了多个连接。当我在控制台中使用 establish_sequel_connection 时,看起来只有一个连接正在建立创建。将其投入生产后不久,数据库服务器由于连接太多而超载。如果 Sequel::DATABASES 是常量,什么会导致对同一个数据库的多个连接?是不是多线程的问题,因为establish_sequel_connection被多个请求同时调用了?
您可能遇到的一个问题是,如果 group
是普通散列,则 group['host']
和 group[:host]
不是一回事。您可能需要修改 database_equal_group?
以说明这一点。
如果所有数据库都使用相同的架构,您可能需要考虑使用 Sequel 的分片支持,而不是创建多个 Sequel::Database 实例。
我在 Rails 应用程序上有一个 Ruby,用户连接到与 config/database.yml 中设置的数据库不同的数据库。可能的数据库连接存储在数据库中的 table 中。通过在 ActiveRecord 模型
上调用establish_connection(connection_config)
为每个请求设置数据库连接
我尝试使用以下代码对 Sequel 做一些类似的事情
def self.establish_sequel_connection group
found = Sequel::DATABASES.find { |db| database_equal_group? db, group }
found || connect_to_group(group)
end
def self.connect_to_group(group)
db = Sequel.connect(
adapter: 'postgres', host: group['host'], database: group['database'],
user: group['username'], password: group['password']
)
if Rails.env.development?
db.sql_log_level = :info
db.loggers.push(Logger.new($stdout))
end
db
end
def self.database_equal_group?(db, group)
db[:host] == group[:host] && db[:database] == group[:database]
end
当我多次使用 Sequel.connect 时,我看到多个数据库 我看到在 PgAdmin 4 中创建了多个连接。当我在控制台中使用 establish_sequel_connection 时,看起来只有一个连接正在建立创建。将其投入生产后不久,数据库服务器由于连接太多而超载。如果 Sequel::DATABASES 是常量,什么会导致对同一个数据库的多个连接?是不是多线程的问题,因为establish_sequel_connection被多个请求同时调用了?
您可能遇到的一个问题是,如果 group
是普通散列,则 group['host']
和 group[:host]
不是一回事。您可能需要修改 database_equal_group?
以说明这一点。
如果所有数据库都使用相同的架构,您可能需要考虑使用 Sequel 的分片支持,而不是创建多个 Sequel::Database 实例。