`
秦朝古月
  • 浏览: 226859 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

让Rails的数据库连接更快--把Ruby/MySQL升级到2.8

    博客分类:
  • Ruby
阅读更多
装了C版本的MySQL数据库适配器以后,Rails工程的性能确实提升了许多。当时安装时使用的是gem install mysql的默认命令,因为是Linux环境,所以安装的版本是2.7。

偶然的一个机会,看到了http://railsexpress.de/blog/articles/2006/10/05/make-ruby-mysql-create-less-garbage。才知道原来这个C版本的MySQL数据库适配器,居然会为记录中的每一行创建一个列名字符串。而Stefan Kaes做了一个patch可以减少列名字符窜的生成,从而提升查询的性能。

Stefan Kaes还在他的博客里抱怨Ruby/MySQL的作者没有理会他的关于这个改善的mail。不过这已经是2006年底的事了,http://www.tmtm.org/en/mysql/ruby/上,最新版本已经是2.8了(但是用gem install mysql安装不了2.8版)。在version 2.8pre1,已经做了相应的修改。
2007-12-26
version 2.8pre1
for Ruby 1.9.0
Incompat: Mysql::Result#each_hash don't create column name string each row. it's shared.
Incompat: Mysql#query with block no longer turn on multi-statements mode automatically.

让我们自己来做个2.8的gem包吧,这样至少在我自己的gem服务器上,可以用gem install mysql来进行安装。
先解压缩MySQL-2.7.gem文件,看看gemspec里都写了些什么。
tar xf mysql-2.7.gem
tar xzf data.tar.gz

mysql.gemspec的内容如下。
--- !ruby/object:Gem::Specification
rubygems_version: 0.8.11
specification_version: 1
name: mysql
version: !ruby/object:Gem::Version
  version: "2.7"
date: 2005-10-10 00:00:00 +02:00
summary: MySQL/Ruby provides the same functions for Ruby programs that the MySQL C API provides for C programs.
require_paths:
  - lib
email: tommy@tmtm.org
homepage: http://www.tmtm.org/en/mysql/ruby/
autorequire: mysql
has_rdoc: false
required_ruby_version: !ruby/object:Gem::Version::Requirement
  requirements:
    -
      - ">"
      - !ruby/object:Gem::Version
        version: 0.0.0
  version:
platform: ruby
files:
  - COPYING
  - COPYING.ja
  - README.html
  - README_ja.html
  - extconf.rb
  - mysql.c.in
  - test.rb
  - tommy.css
  - mysql.gemspec
extensions:
  - extconf.rb

而mysql-ruby-2.8.tar.gz中都有些什么文件呢?
COPYING
COPYING.ja
README.html
README_ja.html
extconf.rb
mysql.c
test.rb
tommy.css

原来没有mysql.c.in,而多了mysql.c。确认了一下双方的extconf.rb内容,2.8确实可以直接使用mysql.c文件。(2.7里需要对mysql.c.i做一些修改后,最后生成mysql.c)
把2.7的mysql.gemspec拷贝到2.8的目录下,然后修改mysql.gemspec。
把版本由2.7改成2.8,再把mysql.c.in改成mysql.c。
接下来做成新的gem包。
gem build mysql.gemspec

试着安装一下。
$ sudo gem install -l mysql-2.8.gem
Building native extensions.  This could take a while...
Successfully installed mysql-2.8

虽然显示成功了,不过还是要做后续动作的。进到安装好的ruby gem的目录,我这里是/usr/local/lib/ruby/gems/1.8/gems/mysql-2.8.
ruby extconf.rb
make && make install

重启rails工程,进行测试吧。对于下边的查询语句。
Product.find(:all,:conditions => 'where id > 500000',:limit => 50)

2.7的时候,执行3000次用了23.2秒。而用2.8之后,只用了16.7秒。性能提升了28%。对于查询返回多条的记录,性能上改进了很多。对于insert,update,delete动作,基本没有变化。

附件里有我做成的gem包。由于上传文件的限制,需要把tar改成gem。
35K的文件居然上传不了?改时间再上传吧。知道原因了,是Chrome不支持这里的文件上传。
分享到:
评论
6 楼 munn 2009-08-31  
linux下现在使用sudo gem install mysql安装已经是2.8.1了,不用再折腾了,不过博主的方法不错,记下了,万一以后新版本用不了可以这样整,谢谢
5 楼 冉翔 2008-12-17  
83858783 写道
我想Windows xp 下弄不来啊?


你拿XP当服务器? 开发环境换不换这个能有啥区别。
4 楼 秦朝古月 2008-12-14  
火星叔叔马丁 写道
lz what about this in rubyforge?



http://rubyforge.org/frs/download.php/44205/mysql-ruby-2.8.tar.gz

tar xzvf mysql-ruby-2.8.tar.gz
cd mysql-ruby-2.8
ruby extconf.rb --with-mysql-dir=/opt/mysql5
make
make install

mysql-dir = xxx 是你自己安装的目录


用tar装可以装2.8的。可是大家安装gem的时候,一般都是使用gem install吧,这样只能装2.7。至少我是这样。

而我需要在配置服务器上先安装,然后同步到各个应用服务器。把tar文件做成gem更方便一些。
3 楼 83858783 2008-12-14  
我想Windows xp 下弄不来啊?
2 楼 秦朝古月 2008-12-12  
附件追加上了,居然是谷歌浏览器不支持javaeye的文件上传。
1 楼 pure 2008-12-12  
没看到附件?

相关推荐

    rails-hackernews-reddit-producthunt-clone, 黑客 news/reddit/social 链接分享网站 用 Rails 构建.zip

    rails-hackernews-reddit-producthunt-clone, 黑客 news/reddit/social 链接分享网站 用 Rails 构建 Rails 上的 Reddit-Hackernews-ProductHunt克隆演示 这是一个 readme.md的Ruby on Rails 应用程序,模仿了 Hacker...

    Rails-doubletap-RCE:使用路径遍历(CVE-2019-5418)和Ruby对象反序列化(CVE-2019-5420)的Rails 5.2.2上的RCE

    使用路径遍历(CVE-2019-5418)和Ruby对象反序列化的RCE on Rails 5.2.2(CVE-2019-5420) 技术分析: CVE-2019-5418- CVE-2019-5420- //hackerone.com/reports/473888 安全部门: CVE-2019-5418- //groups....

    Linux操作系统下轻松配置Ruby的程序环境

    在Ruby应用程序中经常需要连接MySQL数据库,因此需要安装MySQL的Ruby驱动: 1. 下载MySQL Ruby驱动: - **下载地址**:http://www.tmtm.org/en/mysql/ruby/ - **安装包**:mysql-ruby-2.7.4.tar.gz 2. 解压并安装...

    Ubuntu 11.04安装Ruby on rails 连接MySQL数据库.pdf

    ### Ubuntu 11.04下Ruby on Rails与MySQL数据库集成指南 #### 一、安装与配置MySQL数据库 在Ubuntu 11.04环境中,安装MySQL数据库是部署Ruby on Rails应用的重要步骤之一。首先,通过打开终端并执行以下命令进行...

    ruby安装升级及命令自行编译安装非APTGET方式安装升级的办法

    ### Ruby的手动编译安装与升级方法 #### 引言 Ruby是一种动态、面向对象的脚本语言,常被用于Web开发。对于开发者而言,掌握Ruby的安装与配置至关重要。Ubuntu用户通常会依赖于包管理工具`apt-get`来安装Ruby,...

    rails 连接mysql的问题解决

    – c:/ruby/lib/ruby/gems/1.8/gems/mysql-2.7.3-x86-mswin32/ext/mysql.so 实际上是找不到连接所需的dll文件:libmySQL.dll 在mysql安装目录下的bin目录下将此文件复制到ruby的bin目录下即可解决此问题. ...

    Ruby 版数据库连接池

    Ruby 版数据库连接池, 可以参考。 数据库是postgresql

    rubyonrails mysql安装详解

    ### Ruby on Rails与MySQL安装详解 #### 环境配置概览 本文将详细介绍如何在Ubuntu 10.10上从源代码编译安装Ruby 1.8.7、Rails 2.3.5以及MySQL 5.1,旨在为开发者提供一个稳定且高效的开发环境。对于初次接触这些...

    转载 - 26本 Ruby/Rails 相关英文图书简评

    Ruby 和 Rails 是两种非常重要的 IT 技术,它们在软件开发领域中占据着重要的地位。Ruby 是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。Rails,全称为 Ruby on Rails,是...

    Ruby on rails 数据库详细配置

    总的来说,配置Ruby on Rails的数据库涉及到安装必要的数据库驱动和Rails框架,然后在`database.yml`文件中正确设定数据库连接参数。理解这个过程对于开发基于Rails的应用程序至关重要,因为这使得Rails能够与各种...

    rails和mysql数据库连接中出现的问题以及解决办法

    然而,有时在尝试连接Rails应用到MySQL数据库时,可能会遇到一些问题。本篇文章将深入探讨这些常见问题及其解决方案。 首先,Rails与MySQL的连接问题可能源于配置不正确。在`config/database.yml`文件中,你需要...

    Ruby on Rails安装及MySQL数据库配置指南

    Ruby on Rails 安装及 MySQL 数据库配置指南 本文详细介绍了 Ruby on Rails 的安装步骤,以及 MySQL 数据库的配置方法,并提供了一些官方阅读资源。 一、Ruby on Rails 安装 Ruby on Rails 的安装可以分为以下几...

    Ruby-mysql2一个现代的简单和非常快速的RubyMysql库

    这个库的设计目标是提供比其他同类库更高的性能和更简单的API,使其成为Ruby开发者在处理MySQL数据库时的首选工具。 在Ruby社区,mysql2库被视为一个现代的解决方案,因为它不仅支持最新版本的MySQL服务器,还提供...

    BitNami的Redmine升级步骤

    ../installdir/ruby/bin/rake db:migrate RAILS_ENV=production ``` #### 四、常见问题及解决方案 在升级过程中可能会遇到一些问题,以下是一些常见的错误及其解决方法: 1. **缺少必要的gem**: - 如果遇到...

    ruby186-26

    Ruby on Rails 2.0.2 默认使用的数据库是 SQLite3。因此,你需要安装 SQLite3 的驱动。运行 `gem install sqlite3-ruby` 来安装最新的 mswin 版本。随后,从 SQLite 官方网站(http://www.sqlite.org)下载 sqlite3....

    Mac上rails环境的搭建

    本文将详细介绍如何在Mac系统上搭建一个完整的Rails开发环境,包括Ruby环境配置、Rails框架安装、MySQL数据库安装以及RubyMine集成开发环境的配置等关键步骤。 #### 二、Ruby环境配置 由于Mac系统自带Ruby环境,...

    Rails bundle命令安装mysql gem包出错的解决方法

    解决 Rails bundle 安装不上 mysql gem包的问题 环境 ubuntu 12.04 ruby-2.1.1 首先 新建一个的一个项目,在该项目上执行 bundle install 提示 代码如下: … Make sure that gem install mysql2 -v ‘0.3.16’; ...

    ruby on rails与MySql的环境配置——支持rails 2.3.5以上版本

    在开发基于Web的应用程序时,Ruby on Rails(简称Rails)框架和MySQL数据库的结合是常见的选择。本文将详细介绍如何在Windows环境下配置Ruby on Rails以支持Rails 2.3.5及以上版本,并与MySQL进行无缝对接。 首先,...

    rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机.zip

    rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机 用于 Ruby on Rails 核心开发的虚拟机简介注意:这个虚拟机不是为 Rails 应用程序开发而设计的,只是为。 这个项目自动设置开发环境,以便在 Ruby on Rails ...

Global site tag (gtag.js) - Google Analytics