Extralite 3.1.0 现已发布

Lobsters Hottest 工具

摘要

Extralite 3.1.0 已发布,实现了参数化查询的自动缓存,以减少解析开销并提升使用 SQLite 的 Ruby 应用程序的性能。

<p><a href="https://lobste.rs/s/qwijru/extralite_3_1_0_is_here">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/09/22 10:35

# Extralite 3.1.0 正式发布!- Noteflakes 来源:https://noteflakes.com/articles/2026-09-22-extralite-3-1-0 ## Extralite 3\.1\.0 正式发布! ### 2026年9月22日 我刚刚发布了 Extralite (https://github.com/digital-fabric/extralite) 的 3\.1\.0 版本。此次新版本实现了参数化查询的自动缓存,并将内置的 SQLite 更新至 3\.53\.4 版本。 Extralite (https://github.com/digital-fabric/extralite/) 是一个快速且创新的 Ruby SQLite 封装库,功能丰富。它提供了多种从 SQLite 数据库检索数据的方式,使得在多线程和多纤程 Ruby 应用中使用 SQLite 数据库成为可能,并包含了一整套全面的 SQLite 数据库管理工具。 ## 自动查询缓存 Extralite 现在会自动缓存任何参数化查询的底层 `sqlite3_stmt` 对象。此前,当你使用 `Database#query_xxx` 并配以不同参数运行相同的 SQL 时,每次执行查询 Extralite 都会创建一个新的 `sqlite3_stmt`,这导致 SQLite 反复解析相同的 SQL 语句。现在,在调用 `Database#query_xxx` 方法(或 `Database#execute`)时,Extralite 会自动缓存底层的 `sqlite3_stmt` 对象,并在后续调用中复用它,从而减少内存分配、最小化解析开销,让你能够从基于 SQLite 的应用中榨取更多性能。 之前,我曾撰写文章 (https://noteflakes.com/articles/2026-09-05-beyond-orms) 探讨直接编写原始 SQL 查询而非使用 ORM 来操作关系型数据库的优势。Extralite 的核心就是让你能够轻松做到这一点,同时最大化性能。下面是一个简单的示例代码,正是这种用法的体现: ``` class Posts def initialize(db) @db = db end def create(title:, body:) @db.query_splat <<~SQL, title, body insert into posts (title, body) values (?, ?) returning id SQL end def by_id(id) @db.query_single_row <<~SQL, id select id, title, body from posts where id = ? SQL end end ``` 有了自动查询缓存,你不再需要显式创建预编译查询(使用 `Database#prepare`)。你只需执行相同的参数化 SQL,Extralite 就会自动为你完成底层查询的缓存工作。 ## 通过 Extralite 高级使用 SQLite Extralite 旨在让你从 SQLite 数据库中获得最大收益。它会自动为数据库启用 WAL 模式并强制执行外键约束(你可以为遗留数据库关闭此功能)。它提供了高级功能,例如参数化查询的批量执行 (https://github.com/digital-fabric/extralite#batch-execution-of-queries)、保存点 (https://github.com/digital-fabric/extralite#savepoints)、备份 (https://github.com/digital-fabric/extralite#creating-backups) 和变更集 (https://github.com/digital-fabric/extralite#working-with-changesets)。此外,它的速度非常快 (https://github.com/digital-fabric/extralite#performance)! Extralite 还允许你通过结构化转换 (https://github.com/digital-fabric/extralite#structured-transforms) 从查询结果中生成带有身份映射的对象图,让你可以使用单个查询检索实体及其*所有*关联对象,完全无需使用 ORM! 我的目标是让 Extralite 成为一个全面的工具,用于在不使用 ORM 的情况下构建基于 SQLite 数据库的应用。我希望它既快速又易于使用。继实现自动查询缓存之后,我计划实际移除封装预编译查询的 `Extralite::Query` 类,因为在我看来,自动查询缓存已经解决了预编译查询的大部分价值。如果你认为此抽象对于你的用例是必要的,请告诉我,我可能会改变主意。

相似文章

Extralite 3.0.0 发布

Lobsters Hottest

Extralite 3.0.0,一个快速的 Ruby SQLite 封装器,引入了对象图转换和数据库交互的现代默认设置。

SQLite 3.53.0

Simon Willison's Blog

SQLite 3.53.0 发布,带来重要的累积改进,包括 ALTER TABLE 约束修改、新的 JSON 函数(json_array_insert),以及通过新的查询结果格式化库实现的重大 CLI 模式增强。

sqlite-utils 4.0rc3

Simon Willison's Blog

sqlite-utils 4.0rc3 是一个候选发布版本,包含新功能,包括复合外键内省和不区分大小写的列匹配。

ExLlamaV3 重大更新!

Reddit r/LocalLLaMA

ExLlamaV3 发布了一系列重大更新,包括对 Gemma 4 的支持、缓存效率的提升,以及新的 DFlash 技术,可显著提高各类模型的推理速度。

sqlite-utils 3.39.1

Simon Willison's Blog

发布 sqlite-utils 3.39.1,一个用于操作 SQLite 数据库的 Python 工具。