2011-08-25 9 views
6

Ho un singolo server di database con 4 core e un server Web con PHP. Voglio che uno script PHP sia in grado di inviare query al server di database in modo che vengano eseguite in parallelo sul server del database, una su ciascun processo mysqld. In genere in PHP si esegue questa operazione:È possibile che PHP esegua query mysql multielaborate in un ambiente Apache?

$sql = new mysqli([insert connection parameters]); 
$sql->query("SELECT 'Complex Query A'"); 
$sql->query("SELECT 'Complex Query B'"); 
$sql->query("SELECT 'Complex Query C'"); 
$sql->query("SELECT 'Complex Query D'"); 

Ma questi esegue in modo seriale e utilizzare un solo processo mysqld. In questa applicazione, ogni query (da A a D) sta elaborando una parte diversa dei dati, ma sta lavorando sullo stesso set di tabelle InnoDB.

Una possibile soluzione è quella di rendere AJAX chiamate a Apache per una scomposizione in sotto-script che potrebbe corsa in parallelo, ma sto cercando di indovinare che Apache elaborerà quelle chiamate AJAX in sequenza con un processo httpd per cliente.

C'è un modo per raggiungere questo obiettivo? Qualcuno ha esperienza con le funzionalità mysqlnd MYSQLI_ASYNC? Possono funzionare in parallelo con un singolo server di database e una connessione mysqli?

Scopo: eseguiamo strumenti di analisi in tempo reale che generano grafici e mi piacerebbe sfruttare la potenza di elaborazione sul nostro database per accelerare le query che richiedono tempo.

risposta

6

Quello che ti serve è l'esecuzione di query asincrone. È possibile iniziare con PHP 5.3 quando si dispone del nuovo driver mysqlnd, quindi è possibile passare il flag MYSQLI_ASYNC al metodo query(). L'esecuzione dello script continuerà senza attendere il completamento della query. C'è un buon esempio di utilizzo disponibile nel manuale PHP nei commenti per lo poll() method.

Avrete bisogno di una connessione MySQL separata per ogni query che si desidera eseguire in parallelo.

+0

L'ho suggerito anche nella mia domanda, ma sei sicuro che funzioni quando usi una singola connessione? Non richiede più connessioni a due o più server diversi? – Toxikman

+0

Sì, richiede più connessioni, una per ogni query. Ho aggiunto un collegamento ai documenti 'mysqli_poll()' che hanno un esempio. – Crack

Problemi correlati