ruby-on-rails – Rails是否无限期地使用单个“数据库会话”?
我在Rails应用程序中有自定义
PostgreSQL prepared statements的用例(除了
what ActiveRecord does automatically).
我的用例是批量插入一堆行,例如: PREPARE insert_2_events (text,text,timestamp,int,json,timestamp) AS INSERT INTO events (uuid,kind,generated_at,team_id,data,created_at,updated_at) VALUES ($1,$2,$3,$4,$5,$6,$7),($8,$9,$10,$11,$12,$13,$14) ON CONFLICT(uuid) DO NOTHING; EXECUTE insert_2_events( 'ed8bd52a-4ea9-4548-ab02-87adfca90789','call','2017-04-06T16:14:20-04:00',1,'{"some":"data"}','2017-04-06T20:14:20+00:00','27c3251e-aff0-4005-918a-d7011f984515','text','{awesome:true}','2017-04-06T20:14:20+00:00' ); 我不知道,对于任何给定的执行,是否会有2行显示,10行或其他.所以我希望能够做到的是: >如果我的方法被调用3行,看看我是否已经预先准备了这个语句的3行版本. 我可以跟踪“我已经准备好了吗?”在应用程序代码中,但我不确定它是否可靠. PostgreSQL docs say:
我不确定“数据库会话”概念如何映射到Rails应用程序. > Rails应用程序在运行的整个过程中是否会使用相同的数据库会话? 我有一个原型工作,我总是准备语句,并在执行后始终DEALLOCATE它,但这似乎是非常低效的. 这一切都可能过于苛刻而不实用,但它至少是有趣的. 解决方法
PostgreSQL和Rails对同一事物使用不同的词:PostgresSQL中的会话对应于Rails中的连接.
简短的回答:它试图. 答案很长:Rails维护一个线程安全的pool个连接/会话.每个请求都会从池中借用一个连接,然后返回. 如果没有现有连接,例如在第一次请求时或者如果检出所有活动连接,Rails将打开一个新连接(直到达到最大连接数) 因此,除非连接关闭(例如手动或通过PgBouncer),否则在整个应用程序生命周期内最终会得到相同的连接.
流程:是的. 线程:这取决于.并发线程肯定会获得自己的连接,但如果在任何时候只有一个活动的线程,那么它们很可能从池中获得相同的连接. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |