我正在制作一个eggdrop tcl脚本,将几个公共IRC通道的活动写入数据库(我认为随着时间的推移,这将是10到15个通道)。我有两种处理数据库连接的方法。
- 用户说了什么->打开mysql连接到数据库->插入用户所说的信息->关闭连接
- 启动bot ->打开mysql连接到数据库->当有通道活动时插入信息->等待更多信息等
我认为用例1更好,但是当有很多通道活动时,我认为每次打开和关闭连接都会导致大量的服务器负载,并在一段时间后急剧减慢速度。
最好的方法是什么?
如果您想保持连接打开,只需调用
mysql::ping $dbhandle
不时地
可以这样做:
proc keepMySqlOpen {dbhandle} {
mysql::ping $dbhandle
after 2000 [list keepMySqlOpen $dbhandle]
}
....
set dbh [mysql::open ...]
keepMySqlOpen $dbh
...
另一种选择是在访问数据库之前使用mysql::ping
,根据mysqlcl手动重新连接数据库。这可能是两全其美的(如果没有太多的活动,让连接超时,否则保持打开)。