我正在制作一个eggdrop tcl 脚本,将多个公共(public)IRC channel 的事件写入数据库(我认为随着时间的推移,这将是10 到15 个 channel )。我有两个选择如何处理数据库连接。
- 用户说了些什么 -> 打开与数据库的 mysql 连接 -> 插入有关用户所说内容的信息 -> 关闭连接
- 启动机器人 -> 打开与数据库的 mysql 连接 -> 当有 channel 事件时插入信息 -> 等待更多信息等。
我认为最好使用案例 1,但当 channel 事件较多时,我认为每次打开和关闭连接都会导致大量服务器负载,并在一段时间后大幅减慢速度。
最好的方法是什么?
最佳答案
如果您想保持连接打开,只需调用
mysql::ping $dbhandle
不时。
这可以通过以下方式完成:
proc keepMySqlOpen {dbhandle} {
mysql::ping $dbhandle
after 2000 [list keepMySqlOpen $dbhandle]
}
....
set dbh [mysql::open ...]
keepMySqlOpen $dbh
...
另一个选项是在访问数据库之前使用mysql::ping
,这应该根据mysqltcl manual如有必要,请重新连接。这可能是两全其美(如果没有太多事件,则让连接超时,否则保持打开状态)。
关于mysql - 保持 mysql 连接打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15161519/