2

私は、いくつかのパブリック IRC チャネルのアクティビティをデータベースに書き込むための Eggdrop tcl スクリプトを作成しています (時間の経過とともに、これは 10 から 15 チャネルになると思います)。データベース接続を処理する方法として 2 つのオプションがあります。

  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
...

もう 1 つのオプションはmysql::ping、db にアクセスする前に使用することです。これは、必要に応じてmysqltcl マニュアルに従って再接続する必要があります。これは、両方の長所を備えている可能性があります (アクティビティがあまりない場合は接続をタイムアウトさせ、それ以外の場合は開いたままにします)。

于 2013-03-01T17:24:37.047 に答える