50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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:512882

评论

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

【跨国数仓迁移最佳实践5】MaxCompute近线查询解决方案助力物流电商等实时场景实现高效查询

阿里云大数据AI技术

人工智能 大数据 查询优化 批处理 数据迁移

MCP+LLM+Agent:企业AI落地的新基建设计

测吧(北京)科技有限公司

基于生成式AI的设备维护推荐系统构建指南

qife122

知识库 生成式AI

硅芯片创新如何成为某中心云服务的"秘密武器"

qife122

云计算 机器学习加速

Windows Sandbox 内核研究:实现 Bootkit 绕过 PatchGuard 与 DSE

qife122

Windows内核 UEFI

怎么用AI完成海报设计?3个常用AI工具盘点推荐!

职场工具箱

AI 海报生成 AIGC AI绘画 效率软件

使用观测云打造企业级监控告警中心

观测云

监控告警

吴恩达谈数据为中心的AI革命

qife122

人工智能 数据工程

手工电商平台如何利用AI和向量搜索优化产品描述

qife122

AI生成内容 电商优化

可信机器学习中心首批研究项目揭晓

qife122

联邦学习 隐私保护

[鸿蒙征文]鸿蒙 ArkTS AppStorage 数据同步失效:五大原因与高效解决策略

谢道韫

鸿蒙 HarmonyOS HarmonyOS NEXT

统一平台全面保护:NinjaOne收购Dropsuite的技术意义

qife122

数据备份 IT管理

MS10-020:SMB客户端漏洞修复与防护策略详解

qife122

网络安全 漏洞修复 防火墙配置

GraphQL API漏洞挖掘实战:漏洞赏金案例分析

qife122

网络安全 graphql

基于某中心Bedrock的DIVA物流智能助手技术解析

qife122

人工智能 生成式AI

校园里的女开发者,想当小富婆

脑极体

AI

我是如何操纵Bugcrowd平台排名的 - 漏洞挖掘技术解析

qife122

漏洞挖掘 平台安全

Awesome ChatGPT Prompts - 提升AI对话体验的精选提示库

qife122

开发者工具 ChatGPT

【开源项目】基于Rust实现沪深交易所流式二进制协议

歆晨技术笔记

rust 二进制 #交易所

Meta 收购 AI 音频初创 Waveforms;物业和医疗语音公司 EliseAI 获 a16z 领投,估值 20 亿美元

声网

AI正在悄悄学坏?Anthropic首次披露潜意识微调的风险——慢慢学AI161

AI决策者洞察

大模型,意识

StarRocks 亮相 Cloudera 新加坡 EVOLVE25 大会,携手行业领袖探索 AI 创新未来

镜舟科技

cloudera 云原生 StarRocks 数据与 AI 湖仓分析

一键上云不是梦!Apache Dubbo 发布微服务集群部署与全新控制台

阿里巴巴云原生

Apache 阿里云 微服务 云原生 dubbo

国产大模型Qwen3-32B完全本地化实战:LangChain + vLLM 构建企业级智能体核心引擎

测吧(北京)科技有限公司

Alexa语音识别技术在英语学习中的应用

qife122

语音识别 数据增强

计算机视觉前沿探索:自监督学习与高效学习新突破

qife122

计算机视觉 自监督学习

基于加密数据的机器学习模型构建

qife122

同态加密 数据隐私

实时检测机器人广告点击的深度学习技术

qife122

深度学习 实时检测

从多引擎到统一平台:去哪儿网的 StarRocks 实践

StarRocks

数据库 OLAP StarRocks 数据查询 MPP 分布式数据库

IM即时通讯聊天系统开发源码丨IM聊天软件开发架构设计

l8l259l3365

EMET安全工具更新:社区驱动与客户导向的技术演进

qife122

EMET 微软安全

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