我目前正在开发一个副项目(使用 Rust),其中我需要将客户端数据库(postgres、redis 或 meilisearch)提供给 actix 路由。 目标是练习开发可扩展的系统并在此过程中学习 Rust 异步。 该项目非常简单,它需要解析到网络服务器的后查询,并根据某些条件将其放入数据库中并返回。
由于克隆客户端不是线程安全的,也不是可以的,并且您不应该为每个对网络服务器的请求创建一个客户端,因此我已经做了一些研究。
我发现数据库连接池是一个解决方案,但meilisearch没有实现任何内容。 因此,我进行了搜索,但没有发现有多少池有任何帮助,是否有一些关于从工程博客/公司博客获得的性能的“转到”资源,这些资源会有一些反馈,例如潜在的成本/缺点?
如果不存在连接池系统,我应该自己实现一个吗?喜欢扩展 r2d2 吗?还是这个任务太过艰巨?我喜欢 stackoverflow 博客 https://stackoverflow.blog/2020/10/14/improve-database-performance-with-connection-pooling/ 和 cockroachDB https://www.cockroachlabs.com/blog/what-is -连接池/但它们非常小。
一般来说,是否有其他方法可以将客户端提供给 Rust 中的网络服务器,并遵循良好的实践(即使不是基于连接池)?
我无法为您解答有关美丽搜索数据库连接池的问题。但一般来说,是否使用数据库连接池取决于您的需求:
关于问题的第二部分(即将数据库客户端传递到 Rust 中的 Web 服务器),在您的帖子中您说您正在为您的应用程序使用 Actix-Web。 Actix-Web 具有
actix_web::App::app_data
方法,使您能够从路由访问数据库连接,而无需在每个路由中创建新客户端。
希望对你有帮助!