ADODB-change database

Carl on aug 9th 2011

In ADODB you cannot use multiple database connections simultaneously. If you need to work cross database, you have two possibilities:

  • Close the existing connection en setup a new one so you can retrieve the required data from the database;
  • Change database.

Examples:
1. New Connection

$dbhandle = new ADONewConnection( $DSN_1 );
... queries etc. ...
$dbhandle->close ();
$dbhandle = new ADONewConnection( $DSN_2 );
... queries etc. ...
etc, etc

2. Change Database

$dbhandle = new ADONewConnection( $DSN_1 );
... queries etc. ...
$dbhandle->SelectDB ( $databasename );
... queries etc. ...

At first sight the differences do not seem to be very big. However, if your database server has a heavy load, it will certainly make a difference. The first option initialises a new connection every time (even with pconnect) and though you closed the previous connection, the latter still needs to timeout on the server. As a database server is no different then e.g. a web server in handling connections, this means you will be running out of connections (max connections in the server configuration), thus your code will be waiting for a response as the requested connections are being queued. Result for the web application … page timeouts.
The second option re-uses the existing connection. It will only switch from one database to the next. This, however, is only possible if the databases you use can be read by the same user from the same host, as you will understand. The bottleneck of this method is your service provider: Does he, if you are not the one providing the service, allow you to select/update/delete in your multiple databases with one account.

Filed in MySQL @en,PHP @en | Reacties uitgeschakeld

ADODB -database wisselen

Carl on jul 26th 2011

In ADODB kunt u niet meerdere connecties opzetten naar verschillende databases. Indien u cross database tabellen moet uitlezen, zijn er twee opties:

  • De bestaande connectie sluiten en een nieuwe connectie opzetten naar de database waaruit u de benodigde gegevens ophaalt;
  • Wisselen van database.

Examples:
1. Nieuwe connectie

$dbhandle = new ADONewConnection( $DSN_1 );
... queries e.d. ...
$dbhandle->close ();
$dbhandle = new ADONewConnection( $DSN_2 );
... queries e.d. ...
etc, etc

2. Wisselen van database

$dbhandle = new ADONewConnection( $DSN_1 );
... queries e.d. ...
$dbhandle->SelectDB ( $databasename );
... queries e.d. ...

Op het eerste gezicht lijken de verschillen niet groot. Echter (idd), indien een database server zwaar beproeft wordt, maakt het wel degelijk uit. De eerste optie maakt telkens een nieuwe connectie met de server. De server kan maar een aantal connecties aan (configuratie). Daarbij komt nog eens dat iedere bestaande connectie niet meteen beschikbaar is. Er gaat een korte tijd verloren, voordat de connectie daadwerkelijk wordt vrijgegeven. Op een gegeven moment zijn de connecties dus op en iedee request naar de server komt daarmee in de queue. Voor een website betekend dat ‘timeout’ van de pagina.
De tweede optie maakt telkens gebruik van dezelfde resource/connectie en verandert alleen de database waarnaar deze verwijst. Het is wel van belang dat de databases allemaal toegankelijk zijn voor de gebruiker waarmee ingelogd is op de server. Dat is niet voor alle applicaties/websites mogelijk en afhankelijk van de service provider (indien u dat niet zelf bent).

Filed in MySQL,PHP | Reacties uitgeschakeld