产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

Sequel:Ruby 的数据库工具包

  • 2008-12-22
  • 本文字数:2594 字

    阅读完需:约 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).<wbr></wbr>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 之间,对该特性进行了很多重要的修改,使得代码更为清晰而且更便于使用。

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

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

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

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

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

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

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

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

我知道有很多使用 Sequel 的 Rails、Merb、Ramaze 以及 Sinatra 的应用实现。就我个人而言,在应用开发中使用的就是 Sequel 和 Rails 或 Ramaze。

2008-12-22 09:512432

评论

发布
暂无评论
发现更多内容

量化交易系统软件开发(源码)

Geek_23f0c3

量化交易机器人系统开发 量化策略 智能量化交易软件

一个不起眼却非常实用的功能介绍

ThingJS数字孪生引擎

大前端 物联网 可视化 数字孪生

滴滴最看重的SpringCloud手册曾被疯狂转载,现在学还有用吗?

Java~~~

Java 架构 面试 微服务 Spring Cloud

Github星标百万!终于有人将Spring技术精髓收录成册

Java 编程 程序员 架构 面试

写了一年golang,来聊聊进程、线程与协程

捉虫大师

线程 进程 协程 Go 语言

Alibaba新产!Spring+SpringBoot+SpringCloud全家桶进阶小册

Java~~~

Java spring 架构 面试 Spring Boot

三顾茅庐,七面阿里,25k*16offer,还原我的大厂面经

Java 程序员 面试 后端 计算机

TLS协议分析 (九) 现代加密通信协议设计

OpenIM

出自清华大神之手的JVM实战手册,刚上架GitHub点赞就达到85k

Java~~~

Java 架构 面试 JVM 多线程

26岁!月薪38k,全靠这份GitHub百万下载的阿里P5-P9知识核心手册

Java~~~

Java 架构 面试 微服务 多线程

分享 | RadonDB 的开源之路(4 千字长文)

RadonDB

MySQL 数据库 RadonDB

有人在恶意提权吗?

BUG侦探

Linux 主机安全 提权

成为优秀架构师需要具备哪些能力?

卢卡多多

架构师 服务 9月日更

吃透HTTP原理,教你建立安全的HTTPS网站

博文视点Broadview

不吹不黑!阿里新产微服务架构进阶笔记我粉了!理论实战齐飞

Java 程序员 架构 面试 微服务

清华大牛带领20位大厂专家耗时三年整理出这份2000页Java进阶指南

Java~~~

Java 架构 面试 微服务 多线程

让GitHub炸锅的深入理解MySQL实战手册,竟出自阿里云“藏经阁”

Java~~~

Java MySQL 数据库 架构 面试

GitHub上火了这份堪称神级的SpringBoot手册,竟出自滴滴之手

Java~~~

Java spring 架构 面试 Spring Boot

爆赞!GitHub上首本IntelliJ IDEA操作手册,标星果然百万名不虚传

Java~~~

Java 架构 面试 IDEA 架构师

如何实现 Android 短视频跨页面的流畅续播?

阿里云视频云

android App 音视频 Video播放器 APP开发

操作系统的IO模型

Java 程序员 架构 操作系统 计算机

为什么在 Windows 下用 Ctrl+Z 退出 Python 而 Linux 下用 Ctrl+D 呢?

小拍Piper

Python Linux windows

Alibaba内部的10w字Java高频面试手册遭人恶意在牛客网开源下载?

Java~~~

Java 架构 面试 JVM 多线程

打爆怪兽 一起来养猪 养蜂人 幸福饭店 山海经 弹球 旅行世界

游戏开发_软件开发

Java多线程:从基本概念到避坑指南

Java 架构 后端 JVM 计算机

从动物科学到乐队鼓手,腾讯技术小哥的开源人生

腾源会

腾讯云 开源

实用?HUAWEI高工总结出15W字的图解计算机操作系统指南手册

Java~~~

Java 架构 面试 TCP 网络协议

GitOps系列|云原生时代,你还不懂GitOps?

极狐GitLab

security CI/CD gitops

在FL Studio中如何使用混音器的效果

懒得勤快

在职字节师兄分享出了这份数据结构手册,LeetCode现已开放下载

Java~~~

Java 架构 面试 算法 刷题

GitHub经典教材!阿里P8的这份SpringBoot精髓到底厉害在哪里?

Java~~~

Java 架构 面试 微服务 Spring Boot

Sequel:Ruby的数据库工具包_Ruby_Sebastien Auvray_InfoQ精选文章