解决常见的性能问题
简介: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 不会强制您创建有效的数据库设计。