真实世界中的Rails,第3部分: 优化ActiveRecord

解决常见的性能问题

简介: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 不会强制您创建有效的数据库设计。

时间: 2024-08-19 00:44:57

真实世界中的Rails,第3部分: 优化ActiveRecord的相关文章

真实世界中的Rails,第2部分: 高级页面缓存

使用 JavaScript 和 cookies 扩展页面缓存 简介:通常,与用户相关的内容不适于使用页面缓存,原因是针对每个用户的内容会有细微的不同. 通过 JavaScript 和 cookies,甚至可以在显示某些自定义用户数据时采用页面缓存.本文将研究 Ruby on Rails 中的高级页面缓存. 有了页面缓存,Rails 就可以不再介入.在某种程度上,这是件好事 ,因为您的确可以获得优秀的性能.Rails 只需创建 HTML 页面,将其放入目录,之后,就可以置之于脑 后.从那时起,就由

真实世界中的Rails: Rails中的缓存

产品 Rails 应用程序的不同缓存策略 简介:Ruby on Rails 现在愈来愈多地被作为基本框架广泛用于大中型可伸缩的复杂应用程序中.由 于 Ruby 是一种解释型语言,所以要想使 Rails 随您所愿,需要使用很多不同的缓存策略.本文展示了 目前可用的一些缓存策略,包括我们为 ChangingThePresent.org 所使用的那些. 关于本系列 Rails 在开发人员中享有盛誉.Rails 一度备受瞩目,是业界争论的焦点.人们对它的评价也大 相径庭:从一种高生产率技术到一个小玩意,

在Ruby on Rails中优化ActiveRecord的方法_ruby专题

 Ruby on Rails 编程常常会将您宠坏.这一不断发展的框架会让您从其他框架的沉闷乏味中解脱出来.您可以用习以为常的几行代码片断表达自己的意图.而且还可以使用 ActiveRecord. 对于我这样的一个老 Java? 程序员而言,ActiveRecord 多少有点生疏.通过 Java 框架,我通常都会在独立的模型和模式之间构建一种映射.像这样的框架就是映射框架.通过 ActiveRecord,我只定义数据库模式:或者用 SQL 或者用称为迁移(migration)的 Ruby 类.将对

彻底厘清真实世界中的分布式系统

本文讲的是彻底厘清真实世界中的分布式系统,[编者的话]本文从一个实践者的角度,首先介绍了分布式系统的一些理论结果,例如 FLP 不可能性和 CAP 定理等:然后介绍了构建实际分布式系统最重要的一个原则:端到端:最后讨论了实际系统经常用到的协调服务. 求知之路漫长哟,不知何处是尽头.我们一路求索,终于有迹可循.这为我们带来了希望,驱散了恐惧. 译者注:「Down the Rabbit Hole」是一句俗语,源自小说<爱丽丝漫游仙境>(Alice's Adventures in Wonderlan

谈一谈网页中单个页面如何做好SEO优化

摘要: 做为站长你可能经常听到一句话:内容为王.其中的王实际就是指用户所需要的内容,对于搜索引擎优化来说,任何排名靠前的页面,首先他必须有一些优质的内容. 当然这里我们并不 做为站长你可能经常听到一句话:内容为王.其中的"王"实际就是指用户所需要的内容,对于搜索引擎优化来说,任何排名靠前的页面,首先他必须有一些优质的内容. 当然这里我们并不想谈及如何把内容做好,而是想谈下网页中单个页面如何做好SEO优化,同时又能提高用户体验,让用户更容易接受你的内容. 1,网页内容的长度 对于搜索引擎

通信网络中OSPF协议应用与算法优化

3G通信技术已被广泛的应用,并日益向4G演进,通信网络中接入站和传输点的数量呈倍数增长,且仍有快速增长的趋势.通信网络的站点网的能力及局部故障恢复保护机制的要求也变得更高.开放最短路径优先(0SPF)属于一类动态路由的选择协议,它能够快速查探运行网络的拓扑改变,并能够经快速的收敛计算无环路新路由,时间短并用数据流很小,已成现代的通信网组网最佳选择.1通信网络和OSPF协议的相关概念1.1通信网络的相关概念传统通信网络,也就是电话交换网络,由交换.传输及终端组成.交换是终端信息交换中介体,传输是信

Wordpress中如何做一些简单的优化

Wordpress是PHP开源博客程序中最好的,现在很多站长做SEO都选它来做,那是因为它程序自身在网站优化方面做的很好,并且小巧,容易掌握.本文主要讲一下在Wordpress中如何做一些简单的优化,如果您想做博客,做优化试验等就请 您详细了解本文,我想您会有意想不到的收获. WordPress 2.8.6安全更新刚刚几天,今天,11月16日,WordPress官方发布了WordPress 2.9的第一个测试版本:WordPress 2.9 beta 1.beta版本都不太稳定,不喜欢折腾的朋友

Java中利用final关键字inline编译优化真的有效吗?

(inkfish原创,转载请注明出处:http://blog.csdn.net/inkfish/) 为寻求java代码的性能优化,从网上搜到利用final关键字进行编译时inline优化的方法,但是真的有效吗?实际测试中发现未必,甚至性能影响巨大,最终放弃了使用final优化的想法. 测试环境:Windows XP SP2,JDK 1.6.0_15-b03,Eclipse 3.5 SR1.   package test; public class Test { public static voi

javascript 函数:Javascript中产生固定结果函数的优化

分享一个Javascript编写函数的优化技巧.适用的函数应该要满足以下条件:产生固定结果页面中多次调用复杂或较耗时代码和分析如下://产生固定结果并且在页面中多次调用的函数function check() {//模拟耗时操作var begin = Date.now(); //ECMAScript5添加的,若不支持请改成 +new Date();var ONE_SECOND = 1000,result = false;while(true) {if(Date.now() - begin >= O