Возможно, лучшим подходом является кэширование результатов и чтение из кеша, при этом ударив по БД только при необходимости ...
<?php
$cacheKey = 'myCacheNumber1';
if (($data = Cache::read($cacheKey)) === false) {
$data = $this->Model->find('all');
if ($data) {
Cache::write($cacheKey, $data);
}
}
?>
Проблема в том, что предполагается, что модель и соединение с базой данных доступны длявремя, когда кэш-память не существует (или истек срок ее действия), и если бы ее не было, вы все равно получили бы те же ошибки, но частота, безусловно, была бы уменьшена.
Я думаю, чтобы проверить, еслиБД, доступная вообще, потребует некоторой нестандартной хитрости кода, так как метод подключения ядра торта предполагает успех и сильно терпит неудачу, когда недоступен.Вероятно, я бы сделал компонент со стандартными методами PHP-соединения для контроля, если вы попытаетесь загрузить модель.
<?php
$cacheKey = 'myCacheNumber1';
if (($data = Cache::read($cacheKey)) === false) {
if ($this->DbTest->check('hostname','username','password')) {
$data = $this->Model->find('all');
if ($data) {
Cache::write($cacheKey, $data);
}
}
}
?>
<?php
// app/controllers/components/db_test.php
class DbTestComponent extends Object {
function check($hostname,$username,$password) {
$result = true;
$link = @mysql_connect($hostname,$username,$password);
if (!$link) {
$result = false;
}
@mysql_close($link);
return $result;
}
}
?>