我应该在 Tornado 中使用 MySQL 数据库池还是单个持久连接

Should I use MySQL Database Pool or a Single Persistant Connection in Tornado

如果我使用异步 mysql 库,例如 Tornado-MySQL(通过 PyMySQL)或 TorMySQL或 Asynctorndb,它们是执行 MySQL 数据库调用的异步库,因此不会阻止 IOLoop.

我想知道在给定的场景中我应该以什么方式使用它们?

场景:假设我运行将我的 Tornado Web 应用程序安装在 Nginx 后面作为负载均衡器。整个设置都在 AWS EC2 实例中。现在 Nginx、Tornado、MySQL 都在同一台主机上 运行。 Tornado 实例 运行 以 Supervisord 作为进程管理程序。

如果没有。我的 EC2 实例的 VCPU 是 x,没有。 Nginx 工作进程的数量是 y 而不是。的 Tornado 实例是 z,那么在这种情况下,我应该如何使用我的异步 MySQL 库?

  1. 我是否应该在我的应用程序初始化中创建一个 单一持久连接 并将其传递给所有处理程序?或者我应该使用 连接池?

  2. 考虑到 每个方法的效果是什么。龙卷风实例数 运行ning.

  3. 每种方法的优缺点是什么?

"single persistent connection" 策略用于在 Tornado 中使用同步数据库驱动程序(在这种情况下,IOLoop 保证一次只有一个请求可以使用连接)。使用异步驱动程序,多个请求可以同时使用数据库,这意味着您必须使用连接池。