【问题标题】:Keep mysql connection open保持mysql连接打开
【发布时间】:2013-03-01 15:44:40
【问题描述】:

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

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

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

最好的方法是什么?

【问题讨论】:

    标签: mysql tcl eggdrop


    【解决方案1】:

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

    mysql::ping $dbhandle
    

    不时。

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

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

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

    【讨论】: