Hallo liebe PHP-Gemeinde,
ich habe folgendes Problem:
Stellt euch vor, ich habe ein Array1 = array() mit Strings als Schlüssel und Subarrays als Value. Dieses Subarray enthält Integers als Indexwerte und Strings
als Values. Davon baue ich denn ein zweites Array auf. Die (simple) Struktur sieht so aus:
Jetzt leite ich noch ein zweites Array von diesem ab:
Ich habe jetzt zwei Möglichkeiten diese Arrays aufzubauen.
1) Ich code beide Array selbst (statisch)
2) Ich lasse exakt so ein Array durch ein Datenbank Script aufbauen.
Beide Arrays sind aus Sicht des PHP-Developers identisch.
Es gibt 2 Zugriffsfunktionen auf dieses Array:
getColumn(<String> tablename) arbeitet auf Array1;
getEmptyRecord(<String> tablename) arbeitet auf Array2;
Platziert wird dieser Code im Constructor eines Singleton, er wird also nur einmal ausgeführt, erst dann werden die Zugriffsfunktionen benutzt.
Verwendet wird obiges im folgend dargestellten Context:
Ich iteriere über tausende von Datensätzen und rufe bei jedem die Zugriffsfunktion getColumn() und getEmptyRecord() auf.
Ablauf in Pseudo Code:
init: Array aufbauen nach Methode 1) oder 2)
while(!fertig): getColumn(tablename), getEmptyRecord(tablename)
Jetzt ist es so, dass die Ausführungsgeschwindigkeit sich dramatisch unterscheided, abhängig davon ob beide Arrays nach Methode 1) oder 2) aufgebaut werden.
Meine Vermutung ist, dass es Probleme gibt, wenn Datenbankergebnisse (Werte) als Keys für Arrays benutzt werden. Vermutlich speichert PHP intern einen
Datenbankwert nicht als normalen PHP-String sondern als Zeiger auf eine DB Resource. Dies könnte den Zugriff dann drastisch verlangsamen, da der Wert nicht
gepuffert wird, sondern wahrscheinlich jedesmal neu von PHP angefordert wird.
Die Konsequenz daraus ist, dass ich nicht performant Datenbankwerte als Schlüssel nehmen kann.
Meine Frage ist jetzt, kann ich dagegen was tun? Ich würde logischerweise die dynamische Erzeugung der Arrays bevorzugen. Kann ich so einen Datenbankwert in
einen normalen PHP-String umwandeln? Habe schon einiges probiert:
- Casten (hilft nix)
- Kopieren, also $c = $row['field'] (hilft nix, da wahrscheinlich nur der interne Zeiger kopiert wird)
- anderen Datenbanklayer benutzt (PDO und PEARDB)
So, ich weiß, die Problembeschreibung kommt etwas länglich daher, aber ich will euch ja genauste Information zu meinem Problem geben.
Vielen Dank
ich habe folgendes Problem:
Stellt euch vor, ich habe ein Array1 = array() mit Strings als Schlüssel und Subarrays als Value. Dieses Subarray enthält Integers als Indexwerte und Strings
als Values. Davon baue ich denn ein zweites Array auf. Die (simple) Struktur sieht so aus:
PHP-Code:
$array1 = array("Table_A" => array("Column_A_1","Column_A_2",...,"Column_A_N"),
"Table_B" => array("Column_B_1","Column_B_2",...,"Column_B_N")
...
"Table_N" => array("Column_N_1","Column_N_2",...,"Column_N_N");
PHP-Code:
$array2 = array("TableA" => array("Column_A_1" => "0","Column_A_2" => "0",...,"Column_A_N" => "0"),
"TableB" => array("Column_B_1" => "0","Column_B_2" => "0",...,"Column_B_N" => "0"))
1) Ich code beide Array selbst (statisch)
2) Ich lasse exakt so ein Array durch ein Datenbank Script aufbauen.
Beide Arrays sind aus Sicht des PHP-Developers identisch.
Es gibt 2 Zugriffsfunktionen auf dieses Array:
getColumn(<String> tablename) arbeitet auf Array1;
getEmptyRecord(<String> tablename) arbeitet auf Array2;
Platziert wird dieser Code im Constructor eines Singleton, er wird also nur einmal ausgeführt, erst dann werden die Zugriffsfunktionen benutzt.
Verwendet wird obiges im folgend dargestellten Context:
Ich iteriere über tausende von Datensätzen und rufe bei jedem die Zugriffsfunktion getColumn() und getEmptyRecord() auf.
Ablauf in Pseudo Code:
init: Array aufbauen nach Methode 1) oder 2)
while(!fertig): getColumn(tablename), getEmptyRecord(tablename)
Jetzt ist es so, dass die Ausführungsgeschwindigkeit sich dramatisch unterscheided, abhängig davon ob beide Arrays nach Methode 1) oder 2) aufgebaut werden.
Meine Vermutung ist, dass es Probleme gibt, wenn Datenbankergebnisse (Werte) als Keys für Arrays benutzt werden. Vermutlich speichert PHP intern einen
Datenbankwert nicht als normalen PHP-String sondern als Zeiger auf eine DB Resource. Dies könnte den Zugriff dann drastisch verlangsamen, da der Wert nicht
gepuffert wird, sondern wahrscheinlich jedesmal neu von PHP angefordert wird.
Die Konsequenz daraus ist, dass ich nicht performant Datenbankwerte als Schlüssel nehmen kann.
Meine Frage ist jetzt, kann ich dagegen was tun? Ich würde logischerweise die dynamische Erzeugung der Arrays bevorzugen. Kann ich so einen Datenbankwert in
einen normalen PHP-String umwandeln? Habe schon einiges probiert:
- Casten (hilft nix)
- Kopieren, also $c = $row['field'] (hilft nix, da wahrscheinlich nur der interne Zeiger kopiert wird)
- anderen Datenbanklayer benutzt (PDO und PEARDB)
So, ich weiß, die Problembeschreibung kommt etwas länglich daher, aber ich will euch ja genauste Information zu meinem Problem geben.
Vielen Dank
Kommentar