< 返回版块

Mike Tang 发表于 2024-07-28 03:53

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

社区学习交流平台订阅:

评论区

写评论
lithbitren 2024-07-30 00:10

rbatis感觉太宏了,满屏都是感叹号,也照样要写一堆sql,不如sqlx(+sql_builder)应对万变了。

luckoop 2024-07-29 14:09

在尝试使用sea-orm的时候,用结构体编写sql模型,编译器总是提示我结构体名称要model,最后换成rbatis

1 共 2 条评论, 1 页