2016-11-11 11 views
12

czy jest szansa na ustawienie w ustawieniach PDO, że SELECT zostanie wykonane na serwerze SLAVE DB i Insert & Aktualizacja & DELETE zostanie wykonane na serwerze MASTER DB, lub muszę utworzyć program obsługi PHP aby to zrobić?PDO SELECT z SLAVE i INSERT do MASTER

Sytuacja:

Mamy Mistrza - Mistrz replikacji dla MySQL. Mamy zamiar dodać dwa nowe serwery tak będzie - Mistrz/slave - Mistrz/slave.

Chcę utworzyć obsługę dla zapytań SELECT. Chcę wykonać SELECT zapytań na SLAVE zamiast MASTER i wszystko UPADTE & INSERT & DELETE zapytań będą wykonywane na MASTER. Czy to możliwe przy niektórych ustawieniach?

Dzięki!

+1

Jeśli używasz Doctrine DBAL, możesz to łatwo zrobić http://www.doctrine-project.org/api/dbal/2.5/class-Doctrine.DBAL .Connections.MasterSlaveConnection.html, jednak jeśli masz własną interakcję DB z jakąś klasą opakowania, musisz napisać własny kod do obsługi tego samego. –

+2

Można to zrobić za pomocą macierzystego sterownika MySQL: http://php.net/manual/en/mysqlnd-ms.rwsplit.php – Chris

+0

Dziękuję za pytanie i bardzo przydatne @Abhik + chris – Karthi

Odpowiedz

5

Nie, nie można skonfigurować PDO ani żadnego z rozszerzeń bazy danych PHP, aby to zrobić. Jest tak dlatego, że każda instancja PDO (lub MySQLi itp.) Reprezentuje pojedyncze połączenie z pojedynczym serwerem.

Tak, potrzebujesz pomocy, która jest świadoma wielu połączeń, aby to zrobić. Niektóre popularne ORMy i inne warstwy abstrakcji bazy danych zapewniają taką funkcjonalność.

0

Nie polecam tego robić, nawet jeśli można. Replikacja jest "asynchroniczna". Oznacza to, że po włożeniu do Mistrza nie ma pewności, że dotrze do Niewolnika, zanim spróbujesz go przeczytać. Ani żadnej gwarancji, że dotrze ona dzisiaj!

Jeśli użytkownik opublikuje komentarz na blogu, a następnie przejdzie na stronę z komentarzem, zostanie zirytowany, jeśli komentarz nie zostanie wyświetlony. Mogą założyć, że komentarz został utracony, a następnie ponownie go opublikować. Powoduje to żal, gdy użytkownicy narzekają na podwójne publikowanie.

Nazywa się to "krytycznym odczytem". W ten prosty sposób, aby uniknąć bałaganu, należy uważać na to, co wysyłasz do niewolników - a mianowicie nic, co mogłoby doprowadzić do "zniknięcia" postów.

Istnieje wiele pakietów "proxy", które pozwalają na opisywany podział do odczytu i zapisu; niektórzy próbują uniknąć "krytycznego czytania", ale ja im nie ufam.

A Galera Cluster (patrz PXC, MariaDB), robi synchroniczny czyta, więc może uniknąć krytycznego problemu z odczytem. (Istnieje jednak ustawienie, które należy zastosować.)

+0

Rick James - jest to najlepsze rozwiązanie. Możesz także użyć MaxScale (również z klastrem MAriaDB Galera), aby wybrać właściwy serwer. Obejmuje to także przełączanie awaryjne. Głosuję w górę –

+0

3y3skill3r - możesz również zainstalować MaxScale na serwerze, na którym używasz PDO, a MaxScale wybierze odpowiedni serwer –

Powiązane problemy