Während des Spielens mit PHPExcel bin ich auf einige Fragen gestoßen, wie man die Validierung / das Einfügen von Werten in eine Datenbank richtig behandelt. Ich brauche keine Codes, nur das allgemeine Konzept, wie es gemacht wird.
Zuerst iteriere ich durch die erste Zeile, um zu prüfen, ob die Spalten mit der angegebenen übereinstimmen (wenn es zum Schema passt).
Im nächsten Schritt bekomme ich die Zeilen und in der Zwischenzeit wird die Zeile / Spalte validiert. Wenn der Typ nicht übereinstimmt, bekomme ich einen Fehler.
Während ich die Zeile validiere, muss ich den Namen des Arbeiters erhalten und in die ID get_worker_id()
umwandeln.
Fragenummer # 1. Ist eine solche Lösung eine gute Praxis? Es wird bis zu 100 Abfragen produzieren. Für jede Zeile - 1.
Frage Nummer # 2
Ich muss auch die Zeilen noch einmal validieren, ich würde die worker_id, die F- und G-Spalte nehmen, um zu prüfen, ob ein solcher Datensatz in der Datenbank nicht vorhanden ist. Ich würde einfach eine Funktion ähnlich wie get_worker_id()
einführen, aber es würde wahr / falsch zurückgeben, wenn ein Eintrag existiert.
Aber ist das wieder der richtige Weg? Bei rohen Berechnungen würde meine Methode 100 selects (get_worker_id) ergeben, 100 selects (validiere, falls vorhanden), 100 insert (wenn alles in Ordnung ist).
Ich bin mir nicht sicher, ob ich es richtig mache. Könnten Sie mir einige Ratschläge geben?
Danke in Forwards.
Modell für die Behandlung der xlsx-Datei.
%Vor%Anzeige
%Vor%XLSX-Dateibeispiel
%Vor%Das hängt wirklich vom Umfang Ihrer Anwendung ab und davon, wie oft diese Excel-Datei importiert wird. Wenn Ihre Anwendung beispielsweise wenig oder keinen Verkehr empfängt, ist das Ausführen mehrerer Abfragen pro Zeile nicht das Ende der Welt. Wenn Sie den Server und die Datenbank bereits eingerichtet und ausgeführt haben, können Sie sie auch nutzen. Wenn Ihre Anwendung dagegen ständig stark belastet wird, sollten Sie versuchen, die Anzahl der von Ihnen ausgeführten Abfragen zu minimieren.
Option 1
Wenn Ihre Anwendung klein ist und / oder nicht viel Verkehr bekommt, machen Sie sich keine Sorgen um die ca. 300 Abfragen, die Sie machen müssen. MySQL ist nicht fragil und wenn Sie Ihre Daten gut indiziert haben, werden Ihre Abfragen sehr schnell sein.
Option 2
Bewegen Sie sich, um die Daten, die Sie zuerst benötigen, abzufragen und im Speicher abzulegen, damit Sie Ihre Logikprüfungen in PHP durchführen können.
Dies bedeutet für Frage 1, dass Sie alle Ihre Worker in einer Abfrage erhalten und dann ein Lookup-Array in PHP erstellen.
Hier ist ein sehr grobes Beispiel:
%Vor%Ebenso könnten Sie für Frage 2 Ihre eindeutigen Datenproben in einer Abfrage erhalten (Sie benötigen nicht den gesamten Datensatz, sondern nur die eindeutigen Felder). Dies kann jedoch ein Problem darstellen, wenn Sie viele eindeutige Datenstichproben haben.
Option 3
Erstellen Sie eine temporäre Tabelle in MySQL und importieren Sie Ihre Excel-Daten, ohne logische Prüfungen durchzuführen. Dann können Sie Ihre logischen Prüfungen vollständig in SQL durchführen.
Hier ist ein sehr grobes Beispiel, ohne etwas über Ihre Datenstruktur zu wissen:
%Vor%Wenn es keine Probleme mit den Daten gibt, können Sie einen INSERT von Ihrer temporären Tabelle in Ihre Datentabelle durchführen. Dies beschränkt Ihre Abfragen auf die anfängliche Einfügung (Sie können diese auch für eine bessere Leistung anordnen), die Datenprüfung und das Einfügen von temporären in reale Daten.
Zusammenfassung
Es kommt auf Ihre Bewerbung an. Wenn Sie mit der Option 1 durchkommen und diese bereits implementiert haben, ist das in Ordnung. Sie müssen die Dinge nicht über optimieren, wenn Sie nicht sehen, dass diese Anwendung wie verrückt wächst.
Wenn Sie sich jedoch Sorgen über Ausmaß und Wachstum machen, dann würde ich persönlich auf die Umsetzung von Option 3 achten.
Hier gibt es mehrere Bedenken:
Import in Etappen aufteilen.
Um zu wissen, ob Sie etwas Chunking benötigen, hängt es davon ab, wie viel Zeit und Speicher Ihr Skript verbraucht. Wenn Sie es brauchen, ist es so einfach wie X-Zeilen im Speicher zu lesen und dann zu verarbeiten. Im Extremfall können Sie jeden Datensatz einzeln laden. Wenn Sie es nicht brauchen, laden Sie es einfach in das Array.
Chunking - verbraucht bis zu X Zeilen in einer einzigen Iteration, löscht dann den Speicher und verbraucht dann den nächsten Chunk ...
100 Abfragen klingen für eine einzelne PHP-Instanz einfach nicht richtig.
Oder suchen Sie einfach nach n plus 1 Abfrageproblem