【Rust日报】2024-07-23 Sea-orm, diesel, sqlx 比较

💡 原文中文,约1200字,阅读约需3分钟。
📝

内容提要

这篇文章比较了Rust的三种数据库ORM库:sea-orm、diesel和sqlx,并分享了作者的体验和看法。作者最终选择了sea-orm,因为它在查询和反序列化方面更强大,语法更简洁,适合处理复杂查询。另外,一篇总结文章指出,在使用RocksDB作为底层存储时存在一些不足之处。

🔎

延伸解读

选型关键:查询能力与开发体验的权衡

作者最终选择sea-orm,主要因为它在查询和反序列化方面更强大,语法更简洁,适合处理复杂查询。相比之下,diesel虽然类型安全,但构建跨函数边界的查询耗时且返回类型复杂;sqlx支持编译时检查,但对运行时构建的复杂查询支持不足。这反映出在Rust生态中,ORM选型往往需要在编译期安全与运行时灵活性之间做出取舍。

sea-orm的短板:关系API与依赖管理

尽管sea-orm受到青睐,但文章也指出其关系API较弱,只能加载一个实体及其关联实体,且依赖管理存在设计缺陷,导致同一实体间的多重关系处理不便。此外,sea-orm与sea-query的互操作性也有待提升。不过,近期的PR#2179改进了API便利性,迁移操作也更灵活,使用Rust代码而非纯SQL文件。

diesel与sqlx的适用边界

diesel的优势在于能轻松选择多个连接实体,并通过严格的类型系统在编译时避免无效查询,但它以PostgreSQL为基础,可能导致其他数据库的有效查询被拒绝,且同步API在异步上下文中使用繁琐。sqlx则支持编译时查询检查,但缺乏ORM帮助,编写复杂查询麻烦。因此,diesel适合偏好类型安全且以PostgreSQL为主的场景,sqlx更适合需要精细控制SQL的开发者。

延伸阅读:RocksDB在流平台中的局限

文章还提及Feldera CTO的总结,指出在使用RocksDB作为底层存储时存在一些不足之处,认为其在高性能流平台领域不算一个好的选择。这提醒读者,在构建高性能流处理系统时,存储引擎的选择需要谨慎评估,RocksDB可能并非最优解。

❓

Q&A

sea-orm相比于diesel和sqlx有哪些优势?

sea-orm在查询和反序列化方面更强大,语法更简洁,适合处理复杂查询。

diesel的主要缺点是什么?

diesel构建跨函数边界的查询耗时且复杂,且在异步上下文中使用繁琐。

sqlx支持哪些功能?

sqlx支持编译时查询检查,但对复杂查询的支持不足。

作者为什么最终选择sea-orm?

作者选择sea-orm因为它在查询和反序列化方面表现更好,语法更简洁。

sea-orm在迁移操作方面有什么特点?

sea-orm的迁移操作更灵活,使用Rust代码而非纯SQL文件。

使用RocksDB作为底层存储有什么不足之处?

使用RocksDB作为底层存储时存在一些不足,具体内容在相关总结文章中提到。

➡️

继续阅读