真实世界中的Rails,第3部分: 优化ActiveRecord - 编程入门网
真实世界中的Rails,第3部分: 优化ActiveRecord时间:2011-11-20解决常见的性能问题 简介:ActiveRecord 是一种绝妙的持久性框架,但由于框架常常会隐蔽低层的一些细节,因此很容易 产生性能问题。通过本文,了解最为常见的一些问题以及该如何加以解决。 Ruby on Rails 编程 常常会将您宠坏。这一不断发展的框架会让您从其他框架的沉闷乏味中解脱出来。您可以用习以为常的几 行代码片断表达自己的意图。而且还可以使用 ActiveRecord。 对于我这样的一个老 Java™ 程序员而言,ActiveRecord 多少有点生疏。通过 Java 框架,我通常都会在独立的模型和模式之间构建 一种映射。像这样的框架就是映射框架。通过 ActiveRecord,我只定义数据库模式:或者用 SQL 或者用 称为迁移(migration)的 Ruby 类。将对象模型设计建立于数据库结构之上的那些框架称为包装框架。 与大多数包装框架不同,Rails 能通过查询数据库表发现对象模型的特征。与构建复杂查询不同,我使用 模型在 Ruby(而非 SQL)中遍历关系。这样一来,我既获得了包装框架的简单性,又具备了映射框架的 大部分功能。ActiveRecord 易于使用和扩展。有时,甚至有些过于简单。 与任何数据库框架一样 ,ActiveRecord 让我极易做出很多惹麻烦的事。我所能获取的列太多,又很容易遗漏重要的结构化数据 库特性,比如索引或空约束。我并不是说 ActiveRecord 是个不好的框架。只不过若是需要扩展,您需要 知道如何坚固自己的应用程序。在本篇文章中,我将带您亲历在使用 Rails 这一独树一帜的持久性框架 时可能需要的一些重要优化。 基础管理 生成受模式支持的模型异常容易,只需很少的代码 ,即 script/generate model model_name。正如您所知,该命令可生成模型、迁移、单元测试甚至一个 默认的 fixture。在该迁移中填上一些数据列,并输入一些测试数据、编写几个测试、添加几个验证就算 大功告成,这样做真是很有诱惑力。但请您三思而行。您应该考虑总体的数据库设计,要特别注意以下这 些事情: Rails 不会让您摆脱基本的数据库性能问题。数据库需要信息,这些信息经常以索引的 格式才能有不错的性能。 Rails 不会让您摆脱数据完整性问题。虽然大多数 Rails 开发人员都不 喜欢在数据库中保留限制,但您应该考虑像空列这样的事情。 Rails 为很多元素提供了方便的默 认属性。有时,像文本字段的长度这样的默认属性对于大多数实用的应用程序而言都会过大。 Rails 不会强制您创建有效的数据库设计。 真实世界中的Rails,第3部分: 优化ActiveRecord(2)时间:2011-11-20在您继续跋涉,深入学习 ActiveRecord 之前 ,应该首先确保您已经打好了足够的基础。请确保索引结构可以为您所用。如果给定的表很大,如果将在 列上而不是 id 上搜索,如果索引能对您有所帮助(更多细节,请参见数据库管理器文档 —— 不同的数据库以不同方式使用索引),那么就需要创建索引。无需采用 SQL 创建索引 —— 可以简单地使用迁移创建。可以轻松地使用 create_table 迁移创建索引,也可以创建 一个额外的迁移来创建索引。以下是一个迁移示例,可用来为 ChangingThePresent.org (请参见 参考 资料)创建索引: 清单 1. 在迁移中创建索引 class AddIndexesToUsers < ActiveRecord::Migration def self.up add_index :members, :login add_index :members, :email add_index :members, :first_name add_index :members, :last_name end def self.down remove_index :members, :login remove_index :members, :email remove_index :members, :first_name remove_index :members, :last_name e |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |