论坛首页 编程语言技术论坛

Rails项目由Session存储引发的速度问题

浏览 8670 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-16   最后修改:2009-03-30
在./config/environment.rb中取消下面这个注释:
config.action_controller.session_store = :active_record_store


使得Session的存储采用active_record_store方式,测试一个很简单的请求:

class QuickReController < ApplicationController
        def index
                render :text=>"OK!"
        end
end


测试完毕之后将:
# config.action_controller.session_store = :active_record_store

这句话注释掉,再测试该方法。

同样的部署,同样的压力,
发现采用active_record_store 方式Session存储的方法只有60TPS不到,没有采用Session存储的方法有260TPS!我的服务器是4*thin,前面用Apache做负载均衡。

请教下大家,有没有更好的方法让Session这个表的更新读取速度更快,或者换个更快的Sessin存储方式,但机制和active_record_store 类似,以避免出现大的改动。
   发表时间:2009-02-16  
JavaEye是用默认的cookie store,挺好用的
0 请登录后投票
   发表时间:2009-02-16  
默认的cookie store是适合session里面不需要保存大量对象的场景吧,

如果我有很大的对象要放到session里面,通过存储在客户端的cookie是不是不是很合适?还是应该放在服务器的某个地方。只是像active_record_store 这种方式存储的话,频繁的更新来更新去太影响速度。
0 请登录后投票
   发表时间:2009-02-16  
很大的对象要放到session里面,这个问题本身也不合适
0 请登录后投票
   发表时间:2009-02-16  
CharlesCui 写道
默认的cookie store是适合session里面不需要保存大量对象的场景吧,

如果我有很大的对象要放到session里面,通过存储在客户端的cookie是不是不是很合适?还是应该放在服务器的某个地方。只是像active_record_store 这种方式存储的话,频繁的更新来更新去太影响速度。

不建议放大对象到session(不论采用哪种session存储方式),针对不同的需求,你可以选择memcache/数据库内存或者普通表来放大对象,而session中只放这个对象对应的key。
1 请登录后投票
   发表时间:2009-02-16  
我记得有个插件是调整 session ActiceRecord storage 的性能的,关键字是 session lazy loading,楼主可以搜索一下

简单的设置 session 为内存表可能也可以从一定程度上提高些许性能,仅供参考
0 请登录后投票
   发表时间:2009-02-16  
session 默认为事务支持的table,不适合反复的更新。LS建议使用内存表,如果数据库支持那是最好的。但如MySQL因有BLOB或TEXT字段则无法使用Memory,但仍可使用MyISAM代替InnoDB获得较高的性能。
0 请登录后投票
   发表时间:2009-02-16   最后修改:2009-02-16
楼上的也很专业。

不过在DHH设计Rails时,如果使用active_record_store做Session的存储,为什么每次请求过来了都会更新该表?这样频繁的读写不是效率很低啊?

假设我就要用active_record_store方式,Rails有没有提供某个开关控制更新Session表的频率的?不要每个请求过来就更新下最新访问时间等字段,没必要。
0 请登录后投票
   发表时间:2009-02-17  
It's open source, you can hack it as you like
0 请登录后投票
   发表时间:2009-02-17  
rubynroll 写道

It's open source, you can hack it as you like


我想知道他为什么设计成每次访问过来都会更新一下sessions表,虽然rails自动在该表建立了index_sessions_on_session_id和index_sessions_on_updated_at这两个索引,但还是慢,大部分应用都不需要实时更新sessions表。

有控制这个更新频率的开关么?大家有发现么?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics