【问题标题】:Should I use MySQL Database Pool or a Single Persistant Connection in Tornado我应该在 Tornado 中使用 MySQL 数据库池还是单个持久连接
【发布时间】:2016-05-25 11:12:31
【问题描述】:

如果我使用异步 mysql 库,例如 Tornado-MySQL(by PyMySQL)或 TorMySQL 或 Asynctorndb,它们是异步库来执行 MySQL 数据库调用,以免阻塞 IOLoop.

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

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

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

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

  2. 考虑到每种方法的效果会是什么。正在运行的 Tornado 实例数

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

【问题讨论】:

    标签: mysql nginx amazon-ec2 tornado pymysql


    【解决方案1】:

    “单一持久连接”策略用于将同步数据库驱动程序与 Tornado 一起使用(在这种情况下,IOLoop 保证一次只有一个请求可以使用该连接)。使用异步驱动程序,多个请求可以同时使用数据库,这意味着您必须使用连接池。

    【讨论】:

    • 那么你能告诉我一件事,就是数据库级别的数据库调用本身不是同步处理的吗?如果是,那么通过 Tornado 对数据库的异步调用,我们只是让 Tornado 处理更多传入请求而不会阻塞,但是正在等待数据库查询产生的请求,对于这些请求,连接池将如何提供帮助而不是持续连接?如果不是,那它是怎么发生的?
    • 数据库通常会有多个线程,因此它可以一次处理多个请求。涉及相同数据的查询可能会被序列化,但独立的查询可以并行运行。
    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 2010-09-08
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    相关资源
    最近更新 更多