Was ist schneller; eine andere Datei hinzufügen oder eine MySQL-Datenbank in PHP abfragen?

8

In PHP ist das schneller; Verwenden von include('somefile.php') oder Abfragen einer MySQL-Datenbank mit einer einfachen SELECT -Abfrage, um die gleichen Informationen zu erhalten?

Nehmen wir beispielsweise an, Sie hätten ein JavaScript-Suchfeld mit automatischer Vervollständigung, für das 3000 Begriffe benötigt würden. Ist es schneller, diese Begriffe aus einer anderen Datei mit include zu lesen oder sie aus einer MySQL-Datenbank mit einer einfachen SELECT -Abfrage zu lesen?

Bearbeiten: Dies setzt voraus, dass sich die Datenbank und die Datei, die ich einschließen möchte, auf demselben lokalen Computer wie mein Code befinden.

    
Philip Morton 03.10.2008, 09:52
quelle

12 Antworten

14

Es kommt darauf an. Wenn Ihre Datei lokal auf Ihrem Server gespeichert ist und die Datenbank auf einem anderen Computer installiert ist, ist die Datei schneller aufzunehmen.

Buuuuut, weil es von Ihrem System abhängt, könnte es nicht wahr sein. Ich schlage vor, dass Sie ein PHP-Testskript erstellen und es 100 Mal über die Befehlszeile ausführen und den Test über HTTP (mit cURL) wiederholen

Beispiel:

use_include.php

%Vor%

use_myphp.php

%Vor%     
Gravstar 03.10.2008, 10:19
quelle
4

Das Einbinden einer Datei sollte fast immer schneller sein. Wenn sich Ihre Datenbank auf einem anderen Computer (z. B. Shared Hosting) oder in einem Multi-Server-Setup befindet, muss die Suche einen zusätzlichen Hop machen.

In der Praxis wird der Unterschied jedoch wahrscheinlich keine Rolle spielen. Wenn die Liste dynamisch ist, erleichtert das Speichern in MySQL Ihr Leben. Statische Listen (z. B. Länder oder Staaten) können in einem PHP-Include gespeichert werden. Wenn die Liste ziemlich kurz ist (ein paar hundert Einträge) und oft verwendet wird, könnten Sie sie direkt in JavaScript laden und AJAX damit umgehen.

Wenn Sie die MySQL-Route verwenden und sich um die Geschwindigkeit sorgen, verwenden Sie Caching.

%Vor%     
Josh 03.10.2008 11:01
quelle
3

Der Zeitunterschied ist mehr auf das Systemdesign zurückzuführen als auf die zugrunde liegende Technik, die ich zu wagen wage. Sowohl ein MySQL-Ergebnis als auch eine Datei können im Speicher zwischengespeichert werden, und der Leistungsunterschied dort wäre so gering, dass er vernachlässigt werden könnte.

Stattdessen würde ich mich fragen, was der Wartungsunterschied wäre. Werden Sie wahrscheinlich jemals die Daten ändern? Wenn nicht, öffne es einfach in einer einfachen Datei. Vermutlich werden Sie Teile des Inhalts so oft ändern? Wenn dies der Fall ist, ist eine Datenbank viel einfacher zu manipulieren. Das gleiche gilt für die Struktur der Daten, wenn es "Umstrukturierung" benötigt, ist es vielleicht effizienter, es in eine Datenbank zu stellen?

Also: Machen Sie das, was Ihnen am besten passt, für Sie und den zukünftigen Betreuer des Codes und der Daten. : -)

    
Tooony 03.10.2008 10:42
quelle
2

Es ist sehr schwer / unmöglich, eine genaue Antwort zu geben, da es zu viele unbekannte Variablen gibt - was ist, wenn das Dateisystem auf einem angehängt ist NFS , das auf der anderen Seite der Welt wohnt? Oder Sie haben die gesamte MySQL-Datenbank im Speicher. Die Größe der Datenbank sollte ebenfalls berücksichtigt werden.

Aber bei einer mehr antwortenden Antwort ist eine sichere Vermutung, dass MySQL schneller ist , bei guten Indizes, einer guten Datenbankstruktur / Normalisierung und nicht zu ausgefallenen / komplexen Abfragen. I / O-Operationen sind immer teuer (lesen: langsam), während, wie bereits erwähnt, der gesamte Datensatz bereits im Speicher von MySQL zwischengespeichert ist.

Außerdem denke ich, dass Sie darüber nachgedacht haben, weitere String-Manipulationen mit den enthaltenen Dateien durchzuführen, was die Sache noch problematischer macht - ich bin überzeugt, dass die String-Suchalgorithmen von MySQL viel besser optimiert sind als das, was Sie in PHP finden könnten. p>     

Henrik Paul 03.10.2008 10:02
quelle
1

Wenn Sie das regelmäßig abholen, lohnt es sich, die Daten (von der Festplatte oder der Datenbank) vorzufäheln und Ihr Skript aus einem RAM-Cache wie memcached zu ziehen .

    
Bob Somers 03.10.2008 10:29
quelle
0

gehört definitiv dazu, solange die Datei nicht zu groß ist und Sie zu viel Speicher verbrauchen, in welchem ​​Fall eine Datenbank empfohlen wird

    
daniels 03.10.2008 09:58
quelle
0

Das Einlesen von Rohdaten in ein Skript aus einer Datei ist in der Regel schneller als aus einer Datenbank.

Es klingt jedoch so, als wollten Sie diese Daten abfragen, um eine Übereinstimmung zu finden, um zum Javascript zurückzukehren. Sie können in diesem Fall finden, dass MySQL für die tatsächliche Abfrage / Suche der Daten schneller ist (besonders wenn es richtig indiziert wird, usw.), weil das eine Datenbank ist, in der gut ist.

Das Einlesen einer großen Datei ist auch weniger skalierbar, da Sie während der Skriptausführung viel Serverspeicher verwenden.

    
Tom Haigh 03.10.2008 10:03
quelle
0

Warum nicht beides tun und sehen, was schneller ist? Beide Lösungen sind ziemlich trivial.

    
Cosmo7 03.10.2008 14:28
quelle
0

Wenn Sie erwarten, dass die Anzahl der Begriffe zu einem späteren Zeitpunkt größer wird, verwenden Sie besser MySQL mit Volltextsuche Feld.

    
Powerlord 03.10.2008 14:36
quelle
0

Ich hatte dieses Problem kürzlich. Ich hatte einige Daten in MySQL, die ich bei jeder Seitenanfrage abgefragt hatte. Für meinen Datensatz war es schneller eine Datei fester Länge zu schreiben, als MySQL zu verwenden.

Es gab ein paar verschiedene Faktoren, die eine Datei schneller als MySQL für mich gemacht haben:

  1. Die Dateigröße war klein - unter 100 KB Textdaten
  2. Ich habe nach dem Zufallsprinzip gesucht und nicht gesucht - Indizes haben keinen Unterschied gemacht
  3. Verbindungszeit - das Öffnen der Datei und das Einlesen war schneller als die Verbindung zur Datenbank, wenn die Serverlast hoch war. Dies war besonders zutreffend, da das Betriebssystem die Datei im Speicher zwischenspeichert

Fazit war, dass ich das Benchmarking durchgeführt und die Ergebnisse verglichen habe. Für meine Arbeit war das Dateisystem schneller. Ich vermute, wenn mein Datensatz jemals wächst, wird sich das ändern. Ich werde die Leistung im Auge behalten und bin bereit, die Funktionsweise in der Zukunft zu ändern.

    
Gary Richardson 03.10.2008 16:00
quelle
0

Wenn Sie einen PHP-Bytecode-Cache wie APC oder Xcache verwenden, ist die Datei wahrscheinlich schneller. Wenn Sie PHP verwenden und Leistung wünschen, ist ein Bytecode-Cache absolut erforderlich.

Es klingt, als würden Sie in Erwägung ziehen, statische Daten in einem von Ihnen eingeschlossenen PHP-Skript herumzuhalten, um zu vermeiden, dass Sie die Datenbank treffen. Sie machen im Grunde einen rudimentären Cache. Dies kann in Ordnung funktionieren, solange Sie eine Möglichkeit haben, diese Datei zu aktualisieren, wenn sich die Daten ändern. Vielleicht möchten Sie auch etwas über den MySQL Query Cache erfahren, um SQL-Abfragen schneller gegen statische Daten zu machen. Oder Memcached zum Speichern statischer Daten im Speicher.

    
Bill Karwin 03.10.2008 16:21
quelle
-3

Ich weiß es genau nicht, aber in meiner Meinung, MySQL zu verwenden, auch wenn es langsamer sein kann, sollte es verwendet werden, wenn der Inhalt dynamisch ist. Aber ich bin mir ziemlich sicher, dass es schneller ist, für große Inhalte mit include.

    
Enrico Murru 03.10.2008 09:56
quelle

Tags und Links