为 Rust 中的网络服务器提供数据库客户端

问题描述 投票:0回答:1

我目前正在开发一个副项目(使用 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 中的网络服务器,并遵循良好的实践(即使不是基于连接池)?

database rust connection-pooling
1个回答
0
投票

我无法为您解答有关美丽搜索数据库连接池的问题。但一般来说,是否使用数据库连接池取决于您的需求:

  • 如果您需要同时处理许多请求,那么使用数据库连接池可能会很有趣,因为它通过降低应用程序每次收到请求时打开/关闭新数据库连接的成本来提高应用程序的性能。
  • 如果您的应用程序不需要管理许多请求(例如使用本地数据库的单用户应用程序),则数据库连接池不是正确的方法,因为维护打开的数据库连接的成本可能比仅打开/关闭连接的成本更高需要。

关于问题的第二部分(即将数据库客户端传递到 Rust 中的 Web 服务器),在您的帖子中您说您正在为您的应用程序使用 Actix-Web。 Actix-Web 具有

actix_web::App::app_data
方法,使您能够从路由访问数据库连接,而无需在每个路由中创建新客户端。

希望对你有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.