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
社区学习交流平台订阅:
Rustcc论坛: 支持rss 微信公众号:Rust语言中文社区