2013-03-01 2 views
2

Я создаю сценарий eggdrop tcl для записи активности нескольких общедоступных каналов IRC в базу данных (со временем это будет 10-15 каналов, я думаю). У меня есть два варианта использования связи с базой данных.Открывать соединение mysql

  1. пользователь произнесет что-то -> Открыть соединение MySQL в базу данных -> вставить информацию о том, что сказал пользователь -> закрыть соединение
  2. Пуск бот -> Открыть соединение MySQL в базу данных -> Вставьте информацию, когда есть активность канала -> Подождите, пока не появится дополнительная информация и т. Д.

Я думаю, что лучше использовать случай 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 manual повторно при необходимости. Это может быть лучшим из обоих миров (пусть время соединения заканчивается, если активности недостаточно, держите его открытым в противном случае).

Смежные вопросы