PHP имеет созданный в механизме к обработке отказа от одного сервера базы данных до другого?

Вы можете использовать это регулярное выражение:

^(?!\s)[a-zA-Z\d$#@ ]{1,5}(?

Демонстрация RegEx

Подробности RegEx:

  • ^: Старт
  • (?!\s): Отрицательный взгляд, не запускать пробел при запуске
  • [a-zA-Z\d$#@ ]{1,5}: разрешить длину этого символа от 1 до 5
  • (?: отрицательный вид сзади, не допускать пробела до конца
  • $: конец

5
задан Kev 10 October 2008 в 14:38
поделиться

4 ответа

Традиционно обработать стратегии обработки отказа на системном уровне; тем путем все приложения могут обладать устойчивой средой.

Я хотел бы обратиться к стратегии обработки отказа MySQL и прокси MySQL. Последний описывает утилиту MySQL, которая может сделать выравнивание нагрузки и обработку отказа, и кажется довольно легкой настроить.

Не ответ на вопрос, но это - более общее решение для обработки обработки отказа.

8
ответ дан 18 December 2019 в 12:03
поделиться

Нет ничего, встроил для обработки этого в PHP. Необходимо написать код сами.

Лучший подход должен был бы абстрагировать Ваш доступ к базе данных и создать класс, который может инкапсулировать логику обработки отказа.

Вот некоторый код, экспромтом:

interface MySQL_Interface {
    public function query($sql);
}

class MySQL_Concrete implements MySQL_Interface {
    public function __construct($host, $user, $pass, $dbname) {
        $this->_mysql = mysql_connect($host, $user, $pass) or throw Exception("Could not connect to server");
        mysql_select_db($db, $this->_mysql) or throw Exception("Could not connect to database");
    }
    public function query($sql) {
        return mysql_query($sql) or throw new Exception("Query failed");
    }
}

class MySQL_Failover implements MySQL_Interface {
    public function __construct(MySQL_Interface $one, MySQL_Interface $two) {
        $this->_one = $one;
        $this->_two = $two;
    }
    public function query($sql) {
        try {
            return $this->_one->query($sql);
        } catch (Exception $e) {
            return $this->_two->query($sql);
        }
    }
}

$db = new MySQL_Failover(
    new MySQL_Concrete('host1', 'user', 'pass', 'db'),
    new MySQL_Concrete('host2', 'user', 'pass', 'db')
);

$db->query('SELECT * FROM Users');

PS: я уехал вполне немного отсюда, это не должно использоваться дословно.

PPS: я, вероятно, был бы лучше, чтобы пользоваться существующей библиотекой абстракции базы данных (Zend_Db, MDB2, ect) и реализовать их интерфейс вместо того, чтобы создать Ваше собственное специальное решение

3
ответ дан 18 December 2019 в 12:03
поделиться

Нет, это не имеет той сборки в. Я думаю, что простой способ состоит в том, чтобы использовать MySQL Proxy. Иначе, но логика (if (fails) { connect to another }) в Вашем приложении, но это не является настолько симпатичным и большим с точки зрения производительности.

2
ответ дан 18 December 2019 в 12:03
поделиться

php имеет не созданный в механизме обработки отказа - вероятный на серьезном основании. Такая система обработки отказа должна быть реализована в операционной системе или аппаратном уровне.

Так или иначе Ваш образец обеспечивает дешевый и простой механизм обработки отказа.

2
ответ дан 18 December 2019 в 12:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: