Sea-orm, diesel, sqlx 比较
很多人不知道怎么选。有位小哥深入尝试之后,做了一下比较总结。
这篇文章详细比较了三种Rust数据库ORM(Object-Relational Mapping)库:sea-orm、diesel和sqlx,并分享了作者在使用它们过程中的一些体验和看法。
sea-orm:
- 优点:
- 提供了强大的查询API和兼容性。
- 依赖管理存在设计上的缺陷,导致同一个实体之间的多重关系处理不方便。
- 近期的PR#2179大大改进了API的便利性。
- 使用sea-query作为后备,组合查询比diesel简单。
- 迁移操作更灵活,使用Rust代码而非纯SQL文件。
- 文档丰富,但一些边缘情况未覆盖。
- 缺点:
- 关系API较弱,只能加载一个实体及其关联的实体。
- sea-orm与sea-query的互操作性有待提升。
diesel:
- 优点:
- 能够轻松选择多个连接实体,使用元组进行选择。
- 通过严格的类型系统在编译时避免无效查询。
- 缺点:
- 构建跨函数边界的查询十分耗时,返回类型复杂。
- 选择了PostgreSQL作为基础,导致其他数据库(如SQLite/MySQL)的有效查询可能被拒绝。
- 同步API在异步上下文中使用繁琐,需要嵌套闭包。
- 缺乏详细的指南和示例,对于复杂查询的帮助不大。
sqlx:
- 优点:
- 支持编译时查询检查。
- 缺点:
- 对于需要在运行时构建的复杂查询,支持不足。
- 缺乏ORM的帮助,编写查询比较麻烦。
总结: 作者最终选择了sea-orm,尽管它也有一些缺点,但相对于diesel和sqlx,它在查询和反序列化方面更强大,语法更简洁,适合处理复杂查询。
https://www.reddit.com/r/rust/comments/1e8ld5d/my_take_on_databases_with_rust_seaorm_vs_diesel/
如何学习Rust的类型系统设计,自己写一个新语言
跟着这位小哥一起操作吧。
https://ruudvanasseldonk.com/2024/implementing-a-typechecker-for-rcl-in-rust
【行业深度】使用Rust配合RocksDB在高性能流平台领域不算一个好的选择
Feldera CTO写的总结文章,在使用RocksDB作为底层存储的时候发现一些不足之处。
https://www.feldera.com/blog/rocksdb-not-a-good-choice-for-high-performance-streaming/
--
From 日报小组 Mike
社区学习交流平台订阅:
评论区
写评论rbatis感觉太宏了,满屏都是感叹号,也照样要写一堆sql,不如sqlx(+sql_builder)应对万变了。
在尝试使用sea-orm的时候,用结构体编写sql模型,编译器总是提示我结构体名称要model,最后换成rbatis