PDO SELECT из SLAVE и INSERT в MASTER

есть ли возможность установить в настройках PDO, что SELECT будет выполняться на сервере SLAVE DB, а Insert и Update и DELETE будут выполняться на сервере MASTER DB, или мне нужно создать обработчик PHP для этого?

Ситуация:

У нас есть репликация Мастер - Мастер для MySQL. Мы собираемся добавить два новых сервера, чтобы это было - Мастер/ Slave - Мастер/ Slave.

Я хочу создать некоторую обработку для запросов SELECT. Я хочу выполнить запросы SELECT на SLAVE вместо MASTER, и все запросы UPADTE & INSERT & DELETE будут выполняться в MASTER. Возможно ли это с некоторыми настройками?

Спасибо!

Ответ 1

Нет, вы не можете настроить PDO или любые расширения базы данных PHP для этого. Это просто потому, что каждый экземпляр PDO (или MySQLi и т.д.) Представляет одно соединение на одном сервере.

Итак, да, для этого вам понадобится обработчик, который знает о нескольких подключениях. Некоторые популярные ORM и другие уровни абстракции базы данных предоставляют такую ​​функциональность.

Ответ 2

Я рекомендую не делать этого, даже если бы мог. Репликация является "асинхронной". То есть, когда вы вставляете в Учителя, нет уверенности в том, что он прибудет к рабу, прежде чем вы попытаетесь его прочитать. И даже гарантии того, что он поступит сегодня!

Если вы публикуете комментарий к блогу, а затем переходите на страницу с комментарием, они будут раздражены, если комментарий не отображается. Они могут предположить, что комментарий был потерян, а затем отправил его. Это вызывает у вас горя, когда пользователи жалуются на двойную публикацию.

Это называется критическим чтением. Этот простой способ избежать беспорядка состоит в том, чтобы быть осторожным в том, что вы отправляете рабам, а именно ничто, что приведет к "исчезновению" сообщений.

Существуют различные пакеты "прокси", которые позволяют использовать описанный вами раздел чтения и записи; некоторые пытаются избежать "критического чтения", но я им не доверяю.

A Galera Cluster (см. PXC, MariaDB), выполняет синхронное чтение, поэтому он может избежать критической проблемы с чтением. (Тем не менее, необходимо установить параметр.)