`
CharlesCui
  • 浏览: 427815 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多
在./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 类似,以避免出现大的改动。
分享到:
评论
18 楼 tanggq 2009-04-03  
antter 写道
session 默认为事务支持的table,不适合反复的更新。LS建议使用内存表,如果数据库支持那是最好的。但如MySQL因有BLOB或TEXT字段则无法使用Memory,但仍可使用MyISAM代替InnoDB获得较高的性能。


如果能用cookie加解密的,最好用cookie 存
如果用session,就用内存表,且严格限制对象大小,仅作为验证用

其他都存数据库



17 楼 nihongye 2009-04-01  
直接用内存表也可以优化吧
16 楼 phoenix520 2009-02-21  
如果登陆需要使用验证码,而验证码的图片通常是存放在session中,采用cookiestore会不会有问题?
15 楼 njkzc 2009-02-21  
wosmvp 写道
很大的对象要放到session里面,这个问题本身也不合适

14 楼 CharlesCui 2009-02-17  
如果只是简单的一个user_id,并没有其它的冗余字段用来加密该cookie,那就存在被篡改的可能。
13 楼 机器人 2009-02-17  
我在处理登录的时候把user_id放在cookie中。

我把登录信息放在cookie中,这样cookie是保存到你们用户的电脑上,安全么?我是破解不了的啊,

12 楼 hozaka 2009-02-17  
哎,我都告诉你有个现成的项目了,你就不会自己 google 一下么……
rails-fast-sessions
11 楼 vincent253 2009-02-17  
上面所说的各种方法都试过,最终还是cookiestore能一举解决问题。
10 楼 Omnibus 2009-02-17  
rubynroll 写道
It's open source, you can hack it as you like

Rails來講,用ruby override的方法會比較好。
9 楼 CharlesCui 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表。

有控制这个更新频率的开关么?大家有发现么?
8 楼 rubynroll 2009-02-17  
It's open source, you can hack it as you like
7 楼 CharlesCui 2009-02-16  
楼上的也很专业。

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

假设我就要用active_record_store方式,Rails有没有提供某个开关控制更新Session表的频率的?不要每个请求过来就更新下最新访问时间等字段,没必要。
6 楼 antter 2009-02-16  
session 默认为事务支持的table,不适合反复的更新。LS建议使用内存表,如果数据库支持那是最好的。但如MySQL因有BLOB或TEXT字段则无法使用Memory,但仍可使用MyISAM代替InnoDB获得较高的性能。
5 楼 hozaka 2009-02-16  
我记得有个插件是调整 session ActiceRecord storage 的性能的,关键字是 session lazy loading,楼主可以搜索一下

简单的设置 session 为内存表可能也可以从一定程度上提高些许性能,仅供参考
4 楼 QuakeWang 2009-02-16  
CharlesCui 写道
默认的cookie store是适合session里面不需要保存大量对象的场景吧,

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

不建议放大对象到session(不论采用哪种session存储方式),针对不同的需求,你可以选择memcache/数据库内存或者普通表来放大对象,而session中只放这个对象对应的key。
3 楼 wosmvp 2009-02-16  
很大的对象要放到session里面,这个问题本身也不合适
2 楼 CharlesCui 2009-02-16  
默认的cookie store是适合session里面不需要保存大量对象的场景吧,

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

相关推荐

    Rails项目源代码

    这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...

    rails 项目起步示例

    9. **tmp**:临时文件存储,如缓存、session等。 10. **vendor**:第三方库和依赖项的存放位置。 在购物系统(shopping_system)这个项目中,你可能会遇到以下概念和技术: - **ActiveRecord**:Rails内置的ORM...

    activerecord-session_store, 从 Rails 中提取的记录存储的活动会话.zip

    activerecord-session_store, 从 Rails 中提取的记录存储的活动会话 Active Record 会话存储由 Active Record 类支持的会话存储。 提供了默认类,但是任何对 Active Record 会话类的对象鸭类型都有文本 session_id ...

    rails-session_cookie:一个用于获取原始Rails会话Cookie的机架应用

    Rails :: SessionCookie 快速,松散耦合的请求有关经过Cookie验证的应用程序的规范。 为什么 可能,您可能已经看到了很多像这样的代码: # config/initializers/session_store.rb Rails . application . config . ...

    rails的经典学习项目

    而"cookbook.rar"可能是一个Rails的实践手册,里面包含了各种常见问题的解决方案和最佳实践,帮助开发者解决在实际开发中遇到的问题。 在学习Rails的过程中,开发者会接触到许多关键概念和技术,如ActiveRecord...

    Rails的中文乱码问题

    标题中的“Rails的中文乱码问题”涉及到的是在使用Ruby on Rails框架开发Web应用时,遇到的中文字符编码不正确的问题。Rails是一个基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式。在...

    Redmine 搭建 Ruby_Ruby_on_Rails 项目管理系统

    ### Redmine 搭建 Ruby_Ruby_on_Rails 项目管理系统的知识点 #### 一、基础知识与背景介绍 **Redmine** 是一个基于 Web 的项目管理和跟踪工具,它使用 Ruby on Rails(简称 ROR)框架构建而成。Redmine 的设计初衷...

    windows下配置netbeans开发rails

    将这些文件放在系统的PATH环境变量下,或者Rails项目的`bin`目录下,可以解决某些库依赖问题。 7. **开发环境配置**:在NetBeans中,你需要配置Ruby和Rails的路径,以及数据库连接信息。在IDE的首选项设置中,你...

    Ruby-开箱即用的Rails项目模板

    标题中的"Ruby-开箱即用的Rails项目模板"指的是一个预先配置好的Rails项目结构,它包含了特定的设置和集成,以便开发者能够快速启动新项目,无需从零开始配置各种依赖和工具。这种模板通常会包含最佳实践和常用库,...

    rails敏捷开发的购物车系统

    Rails提供了Session存储,可以用来临时存储用户的购物车信息,但这种存储方式不适用于持久保存。因此,通常我们会将购物车内容存入数据库,以便用户在不同会话之间保持购物车状态。在添加或删除商品时,更新购物车...

    使用Aptana+Rails开发Rails Web应用(中文)

    Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。本教程将详细介绍如何使用Aptana与Rails结合,创建一个功能完备的Web应用程序。 首先,我们需要安装Aptana...

    Rails101_by_rails4.0

    此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...

    rails2-sample

    这里还会涉及如何创建第一个Rails项目,以及如何运行服务器以查看项目。对于新手来说,这一步骤是至关重要的,因为它将奠定后续学习的基础。 #### 3. Introducing Ruby(介绍Ruby) Ruby是一种动态、面向对象的...

    activerecord-session_store:从Rails中提取的Active Record的会话存储

    由Active Record类支持的会话存储。 提供了一个默认类,但是任何使用文本session_id和data属性将对象鸭式键入Active Record Session类就足够了。 安装 将此宝石包括到您的Gemfile中: gem 'activerecord-session_...

    Ruby_On_Rails笔记

    综上所述,Ruby on Rails的笔记内容涵盖了从安装Rails环境到创建和运行一个简单的Rails项目的基础知识,这些内容对于初学者来说是学习Rails框架的极好入门材料。通过对这些知识点的学习,初学者可以快速了解Rails的...

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    Rails

    Rails由David Heinemeier Hansson在2004年创建,其设计理念是强调代码的简洁性、DRY(Don't Repeat Yourself)原则和开发效率。 Rails的核心特性包括: 1. **约定优于配置**(Convention Over Configuration):...

    Web开发敏捷之道--应用Rails进行敏捷Web开发 之 Depot代码。

    标题中的“Web开发敏捷之道--应用Rails进行敏捷Web开发 之 Depot代码”表明这是一个关于使用Ruby on Rails框架进行敏捷Web开发的示例项目,名为Depot。Ruby on Rails(简称Rails)是一个开源的Web应用程序框架,它...

    plug_rails_cookie_session_store:与Rails兼容的插件会话存储

    总的来说,`plug_rails_cookie_session_store`是一个帮助Elixir Phoenix应用实现与Rails兼容的会话存储解决方案,方便在Rails和Phoenix之间进行迁移或整合项目,同时确保会话管理的一致性。通过使用这个插件,开发者...

Global site tag (gtag.js) - Google Analytics