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

我应该在Tornado中使用MySQL数据库池还是单个持久连接,mysql,nginx,amazon-ec2,tornado,pymysql,Mysql,Nginx,Amazon Ec2,Tornado,Pymysql,如果我使用异步mysql库,如Tornado mysql(由PyMySQL提供)或TorMySQL或Asynctorndb,它们是异步库,用于执行mysql数据库调用,以避免阻止IOLoop 我想知道的是,在给定的场景中,我应该以何种方式使用它们? 场景:假设我在Nginx后面运行Tornado Web应用程序作为负载平衡器。整个设置在AWS EC2实例中。现在Nginx、Tornado、MySQL都在同一台主机上运行。Tornado实例以Supervisord作为流程管理程序运行 如果我的EC

如果我使用异步mysql库,如Tornado mysql(由PyMySQL提供)或TorMySQL或Asynctorndb,它们是异步库,用于执行mysql数据库调用,以避免阻止IOLoop

我想知道的是,在给定的场景中,我应该以何种方式使用它们?

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

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

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

  • 考虑到这样一个事实,在运行龙卷风实例的数量下,每种方法的效果如何

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


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

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

    那么,你能告诉我一件事吗?那就是,数据库级别的数据库调用本身不是同步处理的吗?如果是,那么通过Tornado对数据库的异步调用,我们只是让Tornado在不阻塞的情况下处理更多的传入请求,但是等待数据库查询结果的请求,对于这些请求,连接池将如何帮助它们,而不是持久连接?如果没有,那么它是如何发生的?数据库通常有多个线程,因此它可以一次处理多个请求。接触相同数据的查询可以序列化,但独立的查询可以并行运行。那么,您能告诉我一件事吗,数据库级别的数据库调用本身不是同步处理的吗?如果是,那么通过Tornado对数据库的异步调用,我们只是让Tornado在不阻塞的情况下处理更多的传入请求,但是等待数据库查询结果的请求,对于这些请求,连接池将如何帮助它们,而不是持久连接?如果没有,那么它是如何发生的?数据库通常有多个线程,因此它可以一次处理多个请求。接触相同数据的查询可以序列化,但独立查询可以并行运行。