InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

Sequel:Ruby的数据库工具包

作者 Sebastien Auvray 译者 颜勋 发布于 2008年12月22日

领域
架构 & 设计,
运维 & 基础架构,
语言 & 开发
主题
数据访问 ,
Ruby ,
Ruby on Rails
标签
Rails ,
JRuby ,
Ruby on Rails ,
ORM ,
ActiveRecord ,
ParseTree ,
Ruby 1.9

实际上ActiveRecord才是Rails的ORM。但除了ActiveRecord外,Sequel(v2.7.1)提供了一个更为完整的Ruby工具包来处理数据库的操作。

- Sequel具有线程安全,连接池等特性,同时提供了简洁的DSL用来创建数据库查询以及表方案。
- Sequel也包含一个轻量级但更全面的ORM层用来映射记录和Ruby对象并处理相关联的记录。
- Sequel支持高级的数据库特性,比如语句准备,参数绑定主/从配置,以及数据库分片
- Sequel使得处理多个记录更加方便。
- Sequel当前提供的适配器可以支持ADO、DB2、DBI、Informix、JDBC、MySQL、ODBC、OpenBase、Oracle、PostgreSQL以及SQLite3。 
Sequel DSL的一个例子:
DB[:countries].filter(:region => 'Middle East').reverse_order(:area).limit(5).avg(:GDP)
 
其将会被翻译成SQL语句:
SELECT avg(GDP) FROM countries WHERE region = 'Middle East' ORDER BY area DESC LIMIT 5
 
项目的最新修改会反映在changelog中,最新的稳定版本可以查看项目基线。

InfoQ有机会采访了Jeremy Evans,在访问中他谈及了关于Sequel的进展和与ActiveRecord性能和特性比较的一些问题。

InfoQ ─ 在以前的采访中,Sharon Rosner提到,他启动Sequel项目的原因在于Rails缺乏多线程和连接池的特性。但自从Rails 2.2版本开始,Rails已经支持这些特性了,那么我们是否还应该选择Sequel呢?

Jeremy ─ 我没有用过ActiveRecord新的连接池的特性,因此我不能将其与Sequel进行比较。Sequel的连接池特性在我接管这个项目之前就已经完成并使用了,而且从其反馈来看几乎没有问题,因此我非常自信的认为Sequel的实现是健壮的。时间会告诉我们是否ActiveRecord的实现也一样好。

还有什么其他的原因吗?是否Sequel相对于ActiveRecord在处理大数据集和多个记录上更为敏捷?尽可能的避免纯SQL,是不是让Sequel相对于ActiveRecord更ruby化?是否在其他的一些领域Sequel的性能比ActiveRecord要好?或者不如ActiveRecord?

Sequel使用SQL并将其暴露在ruby层次上。对于ActiveRecord来说,你需要使用SQL字符串来拼接生成查询语句,而使用Sequel你只需要直接使用ruby对象。Sequel当然是一个更ruby化的数据库工具库,你甚至可以不使用任何的SQL串而完成特殊的应用。

两个框架的有一些方面甚至完全不一样。比如,Sequel支持主/从数据库、数据库分片、绑定参数以及语句准备。ActiveRecord不支持这些(至少是不使用插件时不支持),但是ActiveRecord的方案解析器相比Sequel特性更为丰富,而且ActiveRecord支持一些其他相关的类型(比如多态关联特性),Sequel也可以支持但是使用起来不很方便。

我不确信是否性能是使用Sequel(或者ActiveRecord)的一个原因。有些情况,比如,当选择很多你并不使用的列时ActiveRecord的性能更好。Sequel执行类型转换是在从数据库获取数据时就进行转换,而ActiveRecord直到使用数据时才延迟进行转换。这并不是一个主要的问题,除非你使用的类型是日期型,因为ruby的日期型的数据实例化起来非常慢。要是你只是选择一些你使用的列的话,Sequel应该会更快。如果查询可以简化为一条单独的语句,未进行优化的情况下,Sequel的执行效果相对要差,反之会优于ActiveRecord。

尽管Sequel支持很多的数据库,但是大多数性能上的改进都是面向PostgreSQL或MySQL的;对于其他数据库操作性能上的改进你是否一样有信心呢?

在我的产品应用程序的开发中只使用到了PostgreSQL数据库,所以大多数的数据库的优化工作都是针对PostgreSQL的,因为这对我的应用程序最有好处。有些应用程序的测试中,我使用到了SQLite ,而且唯一一次使用MySQL是跟它一起测试Sequel时用到的。其他Sequel支持的数据库我自己还没有测试过。

针对你的问题,我的答案是“没有”,我并没有充足的信心,因为我还没有将Sequel用于其他的数据库进行应用的经历。但我印象中还没有人提出关于性能方面的意见。

这些采访的时间是在10个月以前,当时Sequel的版本还是0.5版本。从那时起,你负责领导这个项目的开发。那么,就你个人而言,你认为v2.7.1最重要的特性有哪些呢?在开发路线图中,未来是否会有什么非常特别的特性么?你是否有一些开发者使用Sequel进行Rails/Merb开发成功的案例?

直至1.2版本我才开始使用Sequel,因此对于以前的一些修改我并不清楚。从1.2版本起,最重要的修改以及新的特性是:

1) 返璞归真:在2.0版本之前,Sequel的实现采用了很多奇技淫巧。在版本1.5至2.0之间,对该特性进行了很多重要的修改,使得代码更为清晰而且更便于使用。

2) 文档:当我接管这个项目的时候,Sequel 大部分都没有文档。而现在,所有的Sequel至少都有基本的文档,除了一些适配器之外。

3) 关联:Sequel具有任何ruby ORM上最强大的关联特性。ActiveRecord实现了一些很少使用的特殊的关联类型(比如多态关联特性),而Sequel更加强大,它通过将更多的内部工作暴露给用户同时允许更细粒度的控制实现了ActiveRecord不允许的一些关联特性。 

4) 数据集图解:这个特性使你可以连接两个任意的数据集(表),并将结果分成要素表。当你需要连接两个有同名列的表,又不想使用列别名再手动将结果集拆分成要素表时,这个特性就能派上用处,它能为你搞定这一切。

5) 表达式过滤器DSL:以前对于高级的过滤来说,Sequel使用解析树,其性能不尽人意而且不能在JRuby或是Ruby 1.9上使用。 表达式过滤器DSL非常易用,性能更好,可以在所有ruby的实现框架上使用。DSL可以使类似“dataset.filter(:number > 2)”的代码正确运行。 

6) JRuby和Ruby 1.9支持:三个最为广泛使用的ruby实现Sequel现在都支持。 

7) 语句准备/参数绑定:Sequel允许使用真实的数据库的准备语句以及在一些数据库上的参数绑定,一些其他数据库上模拟支持此特性。准备语句相比普通查询来说要快很多,当然跟使用的数据库有关系。

8) 主/从数据库以及数据库分片:Sequel 支持主/从(只读)数据库,以及数据库分片。 

未来的路线图方面,还没有太多的考虑。我的思想很开放,但是目前Sequel的特性基本上满足了所有的需要。现在的工作主要是修改一些细节的问题,还没有什么计划的新特性。

我知道有很多使用Sequel的Rails、Merb、Ramaze以及Sinatra的应用实现。就我个人而言,在应用开发中使用的就是Sequel和Rails或Ramaze。
什么是要素表? 发表人 贾 延平 发表于
  1. 返回顶部

    什么是要素表?

    发表人 贾 延平

    有人能解释一下吗?

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。