写点什么

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

评论

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

【墨菲安全实验室】jeecg-boot/积木报表基于H2驱动的任意代码执行漏洞

墨菲安全

网络安全 安全 漏洞 JeecgBoot MPS-bjs4-n6dm

什么文件传输协议才能保障跨国文件传输安全又稳定

镭速

文件传输协议 跨国文件传输

华为云零代码新手教学-体验通过Astro Zero快速搭建微信小程序

华为云PaaS服务小智

开发者 低代码 华为云

腾讯云原生数据库TDSQL-C Serverless架构全新升级,助力业务存储成本降低80%

极客天地

苹果mac版 Photoshop 2023 v25.0beta「ps」

胖墩儿不胖y

ps 2023 PS 2023破解 ps ai beta

TDengine 全新打造数据接入功能,让 MQTT 无缝数据接入变得很简单

TDengine

时序数据库 mqtt #TDengine

解锁数据潜力:信息抽取、数据增强与UIE的完美融合

汀丶人工智能

人工智能 自然语言处理 信息抽取

【墨菲安全实验室】jeecg-boot/积木报表基于SSTI的任意代码执行漏洞

墨菲安全

漏洞 jeecg-boot MPS-4hzd-mb73

【墨菲安全实验室】企业微信私有化2.5-2.6.93版本后台API未授权访问漏洞

墨菲安全

网络安全 安全 企业微信 漏洞分析

在 React 中获取数据的6种方法

互联网工科生

JavaScript React Promise

从 1 杯咖啡到 1 首歌的时间,炎凰数据如何实现 Pipeline 执行提速 6 倍?

极狐GitLab

DevOps gitlab cicd pipeline 炎凰数据

智能仓储管理系统(自动化仓库管理解决方案)

万界星空科技

MES系统 仓储执行系统 WMS仓库管理

StoneData 2.0 正式上线阿里云市场,高性能、低成本一站式实时数仓,满足用户全场景分析需求

StoneDB

MySQL 数据库 HTAP StoneDB

聊聊自动化测试的分层实践

老张

自动化测试

带你快速上手HetuEngine

华为云开发者联盟

大数据 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

JVM关闭前做点什么

FunTester

成本翻倍,部署复杂?那是你用错了kubernetes!

鼎道智联

Kubernetes CI/CD

攀枝花是哪个省的?当地有等级保护测评机构吗?

行云管家

等保 等级保护 等保测评 攀枝花

糟了糟了,总部被SD画完都Q了,这篇深入浅出贴助你早日实现Stable Diffusion自由 | 京东云技术团队

京东科技开发者

AI绘画 Stable Diffusion 企业号 8 月 PK 榜

龙举云兴|顶级项目 Apache InLong 核心技术探秘

腾讯云大数据

Apache

使用NineData实现数据量亿级别MySQL大表迁移

NineData

数据库 NineData MySQL大表迁移 迁移方案 迁移复制

文心一言 VS 讯飞星火 VS chatgpt (77)-- 算法导论7.3 2题

福大大架构师每日一题

福大大架构师每日一题

中小企业数字化转型系列研究——CLM测评报告

向量智库

软件测试/测试开发丨Python 常用第三方库 urllib3

测试人

Python 程序员 软件测试 测试开发 urllib

跨国视频传输速度太慢?那是因为没有好的跨国文件传输工具

镭速

跨国传输大文件 跨国传输

嵌入式开发场景下的代码管理方案(上)

极狐GitLab

git svn gitlab 嵌入式 源代码管理

极光笔记 | 如何为您的业务开发和训练一个AI-BOT

极光JIGUANG

人工智能 AI技术 AI工具

医疗机构过等保选择哪款堡垒机好?为什么?

行云管家

网络安全 等保 等级保护 IT运维 医疗机构

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