Was ist schneller?

Was ist schneller?

am 29.06.2007 14:29:27 von Oliver Treck

Hallo zusammen.

Geht für mich gerade nur um eine reine Grundentscheidung bezüglich
Performance.

Was ist schneller?

1. In einer MySQL-Connection die Informationen:
SHOW FIELDS FROM Table_x
und
SHOW KEYS FROM Table_x
direkt abzufragen und in PHP zu verarbeiten

oder

2. Diese Informationen in einer cache-datei zwischen zu speichern und diese
in jeder Script-Session neu auszulesen?


Ich würde vermuten, dass MySQL diese Tabellen-Informationen im Hauptspeicher
behält und es daher schneller ist diese Informationen aus MySQL abzufragen
und zu verarbeiten, als z.b. die Informationen einmal auszulesen und in form
eines Serial-Array's in einer Datei zwischen zu speichern.

Oder sehe ich das falsch?

Tests von mir zeigten mir, dass die Ausgaben dieser Informationen meist nur
um die 0,02 sek. dauern und daher sehr schnell sind, aber ändert sich das
evtl. bei größeren Tabellen?


Ziel ist ja, wie immer, die Festplatte als langsamster Rechnerbaustein
möglichst zu entlasten.

Re: Was ist schneller?

am 29.06.2007 15:13:30 von thorny

Oliver Treck schrieb:
> Hallo zusammen.
>
> Geht für mich gerade nur um eine reine Grundentscheidung bezüglich
> Performance.
>
> Was ist schneller?
>
> 1. In einer MySQL-Connection die Informationen:
> SHOW FIELDS FROM Table_x
> und
> SHOW KEYS FROM Table_x
> direkt abzufragen und in PHP zu verarbeiten
>
> oder
>
> 2. Diese Informationen in einer cache-datei zwischen zu speichern und diese
> in jeder Script-Session neu auszulesen?

Noch schneller: Informationen einmal abfragen und sie im eigenen RAM
speichern. Fertig.
Spart serializieren und das schreibe auf die HDD.

Gruß,
Torsten

Re: Was ist schneller?

am 29.06.2007 15:13:30 von thorny

Oliver Treck schrieb:
> Hallo zusammen.
>
> Geht für mich gerade nur um eine reine Grundentscheidung bezüglich
> Performance.
>
> Was ist schneller?
>
> 1. In einer MySQL-Connection die Informationen:
> SHOW FIELDS FROM Table_x
> und
> SHOW KEYS FROM Table_x
> direkt abzufragen und in PHP zu verarbeiten
>
> oder
>
> 2. Diese Informationen in einer cache-datei zwischen zu speichern und diese
> in jeder Script-Session neu auszulesen?

Noch schneller: Informationen einmal abfragen und sie im eigenen RAM
speichern. Fertig.
Spart serializieren und das schreibe auf die HDD.

Gruß,
Torsten

Re: Was ist schneller?

am 29.06.2007 18:06:30 von Johannes Vogel

Hi Oliver

Oliver Treck wrote:
> Geht für mich gerade nur um eine reine Grundentscheidung bezüglich
> Performance.
> Was ist schneller?
> 1. In einer MySQL-Connection die Informationen:
> SHOW FIELDS FROM Table_x
> und
> SHOW KEYS FROM Table_x
> direkt abzufragen und in PHP zu verarbeiten
> 2. Diese Informationen in einer cache-datei zwischen zu speichern und diese
> in jeder Script-Session neu auszulesen?
> Ich würde vermuten, dass MySQL diese Tabellen-Informationen im Hauptspeicher
> behält und es daher schneller ist diese Informationen aus MySQL abzufragen
> und zu verarbeiten, als z.b. die Informationen einmal auszulesen und in form
> eines Serial-Array's in einer Datei zwischen zu speichern.

Weshalb willst du etwas cachen, was sowieso genügend schnell verfügbar
ist? Ich hab das hier getestet bei einer Tabelle mit Datengrösse
1428262588 Bytes (> 1 GB) und hatte ebenfalls den Response in 0.02 Sec.

> Oder sehe ich das falsch?
> Tests von mir zeigten mir, dass die Ausgaben dieser Informationen meist nur
> um die 0,02 sek. dauern und daher sehr schnell sind, aber ändert sich das
> evtl. bei größeren Tabellen?

Wo ist das Problem?!

> Ziel ist ja, wie immer, die Festplatte als langsamster Rechnerbaustein
> möglichst zu entlasten.

Ziel ist immer, die Kosten zu minimieren. Hier ist die Wartbarkeit die
sensitive Grösse.

HTH, Johannes

Re: Was ist schneller?

am 29.06.2007 18:06:30 von Johannes Vogel

Hi Oliver

Oliver Treck wrote:
> Geht für mich gerade nur um eine reine Grundentscheidung bezüglich
> Performance.
> Was ist schneller?
> 1. In einer MySQL-Connection die Informationen:
> SHOW FIELDS FROM Table_x
> und
> SHOW KEYS FROM Table_x
> direkt abzufragen und in PHP zu verarbeiten
> 2. Diese Informationen in einer cache-datei zwischen zu speichern und diese
> in jeder Script-Session neu auszulesen?
> Ich würde vermuten, dass MySQL diese Tabellen-Informationen im Hauptspeicher
> behält und es daher schneller ist diese Informationen aus MySQL abzufragen
> und zu verarbeiten, als z.b. die Informationen einmal auszulesen und in form
> eines Serial-Array's in einer Datei zwischen zu speichern.

Weshalb willst du etwas cachen, was sowieso genügend schnell verfügbar
ist? Ich hab das hier getestet bei einer Tabelle mit Datengrösse
1428262588 Bytes (> 1 GB) und hatte ebenfalls den Response in 0.02 Sec.

> Oder sehe ich das falsch?
> Tests von mir zeigten mir, dass die Ausgaben dieser Informationen meist nur
> um die 0,02 sek. dauern und daher sehr schnell sind, aber ändert sich das
> evtl. bei größeren Tabellen?

Wo ist das Problem?!

> Ziel ist ja, wie immer, die Festplatte als langsamster Rechnerbaustein
> möglichst zu entlasten.

Ziel ist immer, die Kosten zu minimieren. Hier ist die Wartbarkeit die
sensitive Grösse.

HTH, Johannes

Re: Was ist schneller?

am 30.06.2007 04:00:20 von Axel Schwenke

"Oliver Treck" wrote:
>
> Geht für mich gerade nur um eine reine Grundentscheidung bezüglich
> Performance.
>
> Was ist schneller?

Das kannst du nur selber messen.

> 1. In einer MySQL-Connection die Informationen:
> SHOW FIELDS FROM Table_x
> und
> SHOW KEYS FROM Table_x
> direkt abzufragen und in PHP zu verarbeiten
>
> oder
>
> 2. Diese Informationen in einer cache-datei zwischen zu speichern und diese
> in jeder Script-Session neu auszulesen?

Keine dieser Informationen ist von irgendeinem Wert für ein normales
PHP-Skript. Welche Spalten eine bestimmte Tabelle hat, sollte der
Skript-Programmierer schon vorher wissen und Indexe interessieren auf
dieser Ebene auch nicht. WTF soll das werden?

Das einzige Programm, daß diese Art Daten von einer Datenbank abfragen
würde, wäre ein Admin-Tool a'la phpMyAdmin. Aber auch dann nicht auf
jeder Seite und es wäre auch egal, ob das nun 1 oder 10ms dauert.

> Ich würde vermuten, dass MySQL diese Tabellen-Informationen im Hauptspeicher
> behält

Nein.

> und es daher schneller ist diese Informationen aus MySQL abzufragen
> und zu verarbeiten, als z.b. die Informationen einmal auszulesen und in form
> eines Serial-Array's in einer Datei zwischen zu speichern.

Lokale Files werden von richtigen Betriebssystemen auch sehr effizient
im RAM zwischengespeichert. Stichwort Buffercache.

> Tests von mir zeigten mir, dass die Ausgaben dieser Informationen meist nur
> um die 0,02 sek. dauern und daher sehr schnell sind

Also vollkommen irrelevant.

> Ziel ist ja, wie immer, die Festplatte als langsamster Rechnerbaustein
> möglichst zu entlasten.

Du redest wirres Zeug.


XL

Re: Was ist schneller?

am 30.06.2007 04:00:20 von Axel Schwenke

"Oliver Treck" wrote:
>
> Geht für mich gerade nur um eine reine Grundentscheidung bezüglich
> Performance.
>
> Was ist schneller?

Das kannst du nur selber messen.

> 1. In einer MySQL-Connection die Informationen:
> SHOW FIELDS FROM Table_x
> und
> SHOW KEYS FROM Table_x
> direkt abzufragen und in PHP zu verarbeiten
>
> oder
>
> 2. Diese Informationen in einer cache-datei zwischen zu speichern und diese
> in jeder Script-Session neu auszulesen?

Keine dieser Informationen ist von irgendeinem Wert für ein normales
PHP-Skript. Welche Spalten eine bestimmte Tabelle hat, sollte der
Skript-Programmierer schon vorher wissen und Indexe interessieren auf
dieser Ebene auch nicht. WTF soll das werden?

Das einzige Programm, daß diese Art Daten von einer Datenbank abfragen
würde, wäre ein Admin-Tool a'la phpMyAdmin. Aber auch dann nicht auf
jeder Seite und es wäre auch egal, ob das nun 1 oder 10ms dauert.

> Ich würde vermuten, dass MySQL diese Tabellen-Informationen im Hauptspeicher
> behält

Nein.

> und es daher schneller ist diese Informationen aus MySQL abzufragen
> und zu verarbeiten, als z.b. die Informationen einmal auszulesen und in form
> eines Serial-Array's in einer Datei zwischen zu speichern.

Lokale Files werden von richtigen Betriebssystemen auch sehr effizient
im RAM zwischengespeichert. Stichwort Buffercache.

> Tests von mir zeigten mir, dass die Ausgaben dieser Informationen meist nur
> um die 0,02 sek. dauern und daher sehr schnell sind

Also vollkommen irrelevant.

> Ziel ist ja, wie immer, die Festplatte als langsamster Rechnerbaustein
> möglichst zu entlasten.

Du redest wirres Zeug.


XL