2

我正在制作一个 eggdrop tcl 脚本来将几个公共 IRC 频道的活动写入数据库(随着时间的推移,我认为这将是 10 到 15 个频道)。我有两种选择如何处理数据库连接。

  1. 用户说了些什么 -> 打开与数据库的 mysql 连接 -> 插入有关用户所说内容的信息 -> 关闭连接
  2. 启动机器人 -> 打开与数据库的 mysql 连接 -> 在有通道活动时插入信息 -> 等待更多信息等。

我认为使用案例 1 更好,但是当有很多通道活动时,我认为每次打开和关闭连接都会导致服务器负载过大,并在一段时间后大幅减慢速度。

最好的方法是什么?

4

1 回答 1

2

如果您想保持连接打开,只需调用

mysql::ping $dbhandle

时。

这可以通过以下方式完成:

proc keepMySqlOpen {dbhandle} {
    mysql::ping $dbhandle
    after 2000 [list keepMySqlOpen $dbhandle]
}
....
    set dbh [mysql::open ...]
    keepMySqlOpen $dbh
...

另一个选项是mysql::ping在访问数据库之前使用,如果需要,应该根据mysqltcl 手动重新连接。这可能是两全其美的(如果没有太多活动,让连接超时,否则保持打开状态)。

于 2013-03-01T17:24:37.047 回答