我有一个24/7运行的应用程序,它使用mysql。它的不同功能使用mysql。实现它的一种方法是在应用程序中创建一个全局mysql实例,如下所示:
self.db = MySQLdb.connect(
host=self.settings.MYSQL_HOST_LOCAL,
user=self.settings.MYSQL_USER,
passwd=self.settings.MYSQL_PASS,
db=self.settings.MYSQL_DB,
use_unicode=True,
charset="utf8",
)
并使用self.db.execute(...)
执行命令。通过这样做,应用程序使用1个连接。另一种方法是在每次需要执行事务时创建连接。
方法1,防止应用程序一遍又一遍地创建和删除连接,但如果保持理想状态,它将面临“mysql消失”问题。方法2不存在“mysql消失”的问题,但是它有太多的I/O
我很确定这两种方法都不是正确的,但是什么是正确的方法?
在方法1中,根据应用程序场景,“MySQL server has gone away”可能会发生,因为
当引发异常“MySQL server has gone away”时,可以向任何类似于此的db处理程序函数添加decorator以重新连接MySQL db。
一种方法是每次需要执行时都创建一个连接。您还可以创建一个函数来为您执行此操作。这就是它的本意。这不是太多的I/O。。
您还可以执行以下操作:
如果连接已断开,这将引发异常,会话将回滚,它将重试,很可能成功。(第一个解决方案要好得多)
相关问题 更多 >
编程相关推荐