繁体   English   中英

我可以在ActiveRecord(或Mongoid)中为数据库连接和table_name配置线程安全的每个请求配置吗?

[英]Can I have thread safe per-request configuration for database connection and table_name in ActiveRecord (or Mongoid)?

又称<<“用户有很多数据库”的问题。>>

环境

我的应用程序建模如下:

user has_many databases  
database has_many tables  
table has_many rows  
row habtm(+value) columns   

你明白了!

因此,我不想在数据库建模数据库,而是希望:

  • 一个包含用户和的用户的sqlite3数据库
  • 每个用户都有许多sqlite数据库

每个用户都会在他的数据库中LCRUD他的表(类似于phpmyadmin)

问题

我想为数据库连接和table_name提供线程安全的每请求配置

class Table < ActiveRecord::Base
end

# in some controller
# set the connection to the user-selected database from some DB list
Table.connection = current_user.session.connection
# set the name to the user-selected table from some tables list
Table.table_name = params[:table_name]
@rows = Table.all #display them

编辑
如您所见,连接是全局的并且在线程之间共享,但根据我的应用程序的规范,每个用户都有自己的连接。 现在想象两个不同的用户同时发出2个请求。

选项?

  • 我放弃了ActiveRecord并使用了裸机DB驱动程序
  • 我放弃线程安全

我相信这是咒语:
使用Class.new(AR::Base)动态创建类

post_class = Class.new(ActiveRecord::Base)
post_class.connection = set_up_connection()
post_class.table_name = :posts

@posts = post_class.all
puts @posts

# note: post_class will get GC'ed at scope end just like any var, sweet!

Rails通常设置为每个请求一个进程,以便每个http请求由其自己的进程处理。 查找允许的apache模块的乘客

在这样的配置中,不需要线程安全,事实上活动记录不完全是安全的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM