[PHP] Connectie met 2 databases

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben momenteel met een vrij grote community-site bezig. Tot nu toe werkt alles naar behoren, de parsetime van een willekeurige pagina is ruim binnen de seconde (verder geen timer-script ofzo geinstalleerd).

Nu is het de bedoeling dat in het menu ook de laatste x forumtopics worden weergegeven. Het forum draait echter op een andere database (wel op dezelfde server) en een simpele query is dus niet echt mogelijk. Ook een RSS/XML feed van het forum is niet aanwezig. Ik had hiervoor het volgende bedacht: Maak een functie die even connect naar de database van het forum, hier de benodigde query uitvoert en de resultaten teruggeeft als een array. Dit werkte allemaal wel, alleen was zodra deze functie werd uitgevoerd (en dat hoort dus op iedere pagina) de parsetime van iedere pagina onacceptabel groot, zeg maar meer dan 10 seconden. Is dit normaal bij een tweede database-connectie, weet iemand betere/snellere methoden?

Acties:
  • 0 Henk 'm!

Verwijderd

Is het geen optie om de site en het forum dezelfde database te laten gebruiken? Zo niet, wat voor database gebruik je? Bij bijvoorbeeld MySQL kun je zonder veel moeite ook uit een andere database gegevens selecteren, als de user daar de rechten voor heeft,

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Je kunt meerdere MySQL verbindingen tegelijk maken. Waar je met één verbinding gewoon doet
PHP:
1
mysql_connect("localhost","username","password");
doe je dan
PHP:
1
$link=mysql_connect("localhost","username","password");

Als tweede argument van mysql_query kun je dan $link gebruiken.

Tien seconden is voor jou methode erg lang. Doormiddel van debugging kun je kijken welke regel zo lang duurt. Probeer ook de query die je uitvoert lokaal uit te voeren. Misschien zijn er geen indexen oid, en duurt die gewoon heel lang. Het kan natuurlijk ook zijn dat de verbinding traag is, maar door debuggen moet je daarachter kunnen komen.

[ Voor 7% gewijzigd door GlowMouse op 05-02-2005 15:34 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem was dus gewoon de query die uitgevoerd moest worden, die duurde "los" ook al ruim 10 seconden. Dit is inmiddels verholpen en alles werkt nu.

Toch zit ik nog een beetje met een vraag: is het nu beter om een tweede database-connectie op te zetten (dus opnieuw mysql_connect doen) of bij de bestaande databaseconnectie een andere database te selecteren (dus mysql_select_db(andere_db), query uitvoeren, mysql_select_db(oude))?

Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

Opnieuw opzetten is onnodig - het kost extra tijd en resources, terwijl je er niets extra's voor terug krijgt.
Gewoon database selecteren (mysql_select_db("databasenaam"), of mysql_query("USE databasenaam")). Strikt genomen betekent het verbinden met een database heel weinig. Het is alleen makkelijker om je tabellen met een eenvoudiger syntax te benaderen, verder heeft het geen effect. Je kunt ook "SELECT veld FROM databasenaam.tabelnaam" doen.

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Totdat je gedistribueerd bezig gaat zijn (forum verhuist ofzo) en dan moet je je code weer omgooien. De overhead van het openen van die ene mysql connectie doet het hem nou ook weer niet hoor.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Het is zelfs zo dat als er al een verbinding naar de database-server bestaat hij gewoon de bestaande connectie zal gebruiken tenzij je 'm forceert een nieuwe connectie te maken.

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 08 februari 2005 @ 22:20:
Toch zit ik nog een beetje met een vraag: is het nu beter om een tweede database-connectie op te zetten (dus opnieuw mysql_connect doen) of bij de bestaande databaseconnectie een andere database te selecteren (dus mysql_select_db(andere_db), query uitvoeren, mysql_select_db(oude))?
PHP:
1
2
3
4
5
6
7
8
$db1 = mysql_connect('localhost','user1','passwd1');
$db2 = mysql_connect('localhost','user2','passwd2');

mysql_select_db('db1', $db1);
mysql_select_db('db2', $db2);

$res_db1 = mysql_query("SELECT * FROM db1.tabel", $db1);
$res_db2 = mysql_query("SELECT * FROM db2.tabel", $db2);


http://nl2.php.net/manual/nl/function.mysql-select-db.php
Pagina: 1