Ik heb een probleempje met het uitvoeren van een groot aantal mysql queries achter elkaar.
Ik heb een webservice gemaakt, deze webservice moet er voor zorgen dat 2 databases synchroon met elkaar worden gehouden.
Als in de ene applicatie een wijziging wordt gedaan, dan roept deze een webservice aan, die de gewijzigde gegevens ontvangt en de wijziging doorvoert in de mysql database.
De code die ik gebruik voor de webservice is deze (gesimplificeerd):
Dit werkt prima, als ik in de aanroepende applicatie 200 records tegelijk wijzig wordt de webservice 200x aangeroepen en worden de wijzigingen prima doorgevoerd.
Wat helaas niet goed gaat is erg grote aantallen. het zou in theorie mogelijk kunnen zijn dat er 10.000 records tegelijk worden gewijzigd in de aanroepende applicatie. Probeer ik dat, dan gaat het fout. In mijn logfiles zie ik dan de volgende melding terug:
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'localhost' (10048)
Kennelijk kan mysql het grote aantal queries achter elkaar niet aan.
Idealiter zou ik alle update in 1x doen (bijvoorbeeld met een transactie) maar doordat ze stuk voor stuk door de webservice komen is dit niet mogelijk.
Heeft iemand enig idee hoe dit wel goed zou kunnen?
Ik heb een webservice gemaakt, deze webservice moet er voor zorgen dat 2 databases synchroon met elkaar worden gehouden.
Als in de ene applicatie een wijziging wordt gedaan, dan roept deze een webservice aan, die de gewijzigde gegevens ontvangt en de wijziging doorvoert in de mysql database.
De code die ik gebruik voor de webservice is deze (gesimplificeerd):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| class MySoapServer { public function updaterecord ($param1, $param2) { //Zet connectie op $dsn = 'mysql:host=hostname;dbname=dbname'; $dbh = new PDO($dsn,'username','password'); $sql = "update `table1` set `param1` = '$param1' where `param2` = '$param2'"; $affected_rows = $dbh->exec($sql); $dbh = null; //verbreek verbinding return $affected_rows; } } $options = array('uri' => 'http://serverx/soapserver.php'); $server = new SoapServer(null,$options); $server->setClass('MysoapServer'); $server->handle(); |
Dit werkt prima, als ik in de aanroepende applicatie 200 records tegelijk wijzig wordt de webservice 200x aangeroepen en worden de wijzigingen prima doorgevoerd.
Wat helaas niet goed gaat is erg grote aantallen. het zou in theorie mogelijk kunnen zijn dat er 10.000 records tegelijk worden gewijzigd in de aanroepende applicatie. Probeer ik dat, dan gaat het fout. In mijn logfiles zie ik dan de volgende melding terug:
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'localhost' (10048)
Kennelijk kan mysql het grote aantal queries achter elkaar niet aan.
Idealiter zou ik alle update in 1x doen (bijvoorbeeld met een transactie) maar doordat ze stuk voor stuk door de webservice komen is dit niet mogelijk.
Heeft iemand enig idee hoe dit wel goed zou kunnen?