Ich habe einen Leistungstest zwischen Laravel Query Builder und Beredsamkeit durchgeführt. Der Abfrage-Generator war mit verschiedenen SQL-Anweisungen (Select-Update-Delete-Insert) viel schneller.
Meine Frage lautet also: Warum verwendet jemand Laravel Eloquent gegen den einfachen Abfrage-Builder?
Eloquent
undQuery Builder
beide produzieren das gleiche,data
ausdatabase
. Vielleicht vergleicht er deshalb diese beiden.$object->filter($something_we_just_calculated)
während der Bearbeitung eines Entscheidungsbaums gelesen werden . Sie können an Eloquent wie JQueryAntworten:
Eloquent ist Laravels Implementierung des Active Record-Musters und weist alle seine Stärken und Schwächen auf.
Active Record ist eine gute Lösung für die Verarbeitung einer einzelnen Entität auf CRUD-Weise. Erstellen Sie also eine neue Entität mit gefüllten Eigenschaften und speichern Sie sie in einer Datenbank, laden Sie einen Datensatz aus einer Datenbank oder löschen Sie sie.
Sie profitieren stark von Eloquents Funktionen wie Dirty Checking (um SQL UPDATE nur für die geänderten Felder zu senden), Modellereignissen (z. B. um administrative Warnungen zu senden oder Statistikzähler zu aktualisieren, wenn jemand ein neues Konto erstellt hat), Eigenschaften ( Zeitstempel, weiche Löschvorgänge, Ihre benutzerdefinierten Merkmale) eifriges / verzögertes Laden usw. Sie können auch domänengesteuerte Muster anwenden und einige Teile der Geschäftslogik in Ihre Active Record-Entitäten implementieren, z. B. Validierung, Verwaltung von Beziehungen, Berechnungen usw.
Wie Sie bereits wissen, ist Active Record mit einem gewissen Leistungspreis verbunden.
Wenn Sie einen einzelnen Datensatz oder einige Datensätze verarbeiten, müssen Sie sich keine Sorgen machen. In Fällen, in denen Sie viele Datensätze lesen (z. B. für Datagrids, Berichte, Stapelverarbeitung usw.), sind die einfachen Laravel-
DB
Methoden ein besserer Ansatz.Für unsere Laravel-basierten Anwendungen verwenden wir beide Ansätze, wie wir es für angemessen halten. Wir verwenden Laravels Eloquent for UI-Formulare, um einen einzelnen Datensatz zu verarbeiten, und verwenden
DB
Methoden (unterstützt durch SQL-Ansichten mit zusätzlichen datenbankmodulspezifischen Leistungsverbesserungen), um Daten für UI-Tabellen abzurufen, Aufgaben zu exportieren usw. Es funktioniert auch gut mit RESTful-APIs - Eloquent for GET , PUT, POST, DELETE mit einem Schlüssel undDB
für GET ohne Schlüssel, aber mit Filtern und Sortieren und Paging.quelle
new User()
für jede zurückgegebene Benutzerzeile. Dies dauert vielleicht nur 1 ms, aber wenn Sie 10'000 Datensätze haben? Dies ist oft nicht einmal notwendig, da Sie manchmal nur den Benutzernamen zurückgeben möchten. In diesem FallDB::select
wäre schneller. Beachten Sie auch: Beredsam ist nicht Laravels Implementierung afaik. Es ist die Implementierung von Symphony, die von Laravel angepasst wurde oder irgendwann war, wenn ich mich richtig erinnere.Ja, in einigen Fällen haben Sie recht. Wenn wir mehr Daten haben und fast auf jeder Site, sind die Daten nicht wirklich klein. Dann ist es besser, DB Query als Eloquent Query zu verwenden .
In einem Leistungsproblem von Eloquent VS DB habe ich das gehört,
Warum dann Eloquent? Ist das nicht nötig?
Antwort ist - Beredsam ist auch notwendig. Ursache-
// In Eloquent $student = App\Student::find($id); // In DB facade $student = DB::table('student')->where('id', $id)->first();
Wenn wir also Eloquent- und When DB-Fassaden verwenden:
Schließlich ist klar, dass - wann wir die Datenbankabfrage verwenden und wann wir die eloquente Abfrage verwenden.
Bearbeiten - Beispiel aus dem wirklichen Leben
5,000 teachers and 10,000 students and some notices and files
. Dann ist es besser, dies mit einfachem Laravel Eloquent zu tun, das sehr normal und lesbar ist.1,000,0000 (1 crore) posts and many more things
. Ich muss dort die konventionellen DB-Fassaden wählen. Es ist schneller, die Beiträge aus so vielen Datensätzen zu durchsuchen.Sie können Ihre Abfrageleistung mithilfe der Laravel-Debugbar überprüfen (ein beliebtes Paket zum Überprüfen der Leistung / Ausführungszeiten von Eloquent- / Datenbankabfragen).
Jetzt haben Sie die Wahl. Was du machen willst ...
Sie können hier einen vollständigen Code durch Codevergleich mit Leistung, Speicherverbrauch und Codequalität überprüfen - https://devsenv.com/tutorials/laravel-eloquent-vs-db-query-builder-performance-and-other-statistics
quelle
Warum Laravel Eloquent:
OOP
Art und Weise ausführen .query builder
.table schema
. Das heißt, selbst wenn Sie Ihren Tabellennamen ändern, müssen Sie keinen einzigen berührenquery
(möglicherweise 1000query
), damit er funktioniert. Ändern Sie einfach den Tabellennamen in eloquentmodel
.JOIN, LEFT JOIN, RIGHT JOIN
usw.), das in der Abfrage mehr benötigt wird, um Daten verwandter Tabellen zu erhalten.quelle
Wenn es um Leistung geht und die Anwendung wächst, sollten Sie zu Vergleichszwecken die folgenden Tabellen verwenden:
Vergleich der durchschnittlichen Antwortzeit für ausgewählte Operationen zwischen Eloquent ORM und Raw SQL
Eloquente ORM durchschnittliche Antwortzeit
Joins | Average (ms) ------+------------- 1 | 162,2 3 | 1002,7 4 | 1540,0 Result of select operation average response time for Eloquent ORM
Durchschnittliche Antwortzeit für Raw SQL
Joins | Average (ms) ------+------------- 1 | 116,4 3 | 130,6 4 | 155,2 Result of select operation average response time for Raw SQL
Artikelreferenz
quelle
Es ist nur meine Meinung, keine umfassende Antwort. Ich benutze alles, was in einer bestimmten Situation bequemer ist.
Wenn ich auf ein Paket oder einen Code stoße, der entweder in eloquent oder im Abfrage-Generator geschrieben ist, verwende ich alles, was verwendet wird.
Ich fand den Abfrage-Generator intuitiver, wenn ich etwas von Grund auf neu erstelle, damit ich es häufiger verwende.
Wenn es um Laravel geht, ist die Leichtigkeit und Geschwindigkeit der Entwicklung einer App anscheinend wichtiger als die Leistung. Ich mag es wirklich, dass sie alles sehr einfach machen, selbst für jemanden mit geringen Vorkenntnissen in PHP / MySQL. In einigen Fällen ist eloquent einfacher als der Abfrage-Generator. In anderen umgekehrt. Ich denke, viele Möglichkeiten zu haben, etwas zu tun, macht Laravel so einfach und neulingfreundlich.
quelle
Eloquent ORM eignet sich am besten für die Arbeit mit weniger Daten in einer bestimmten Tabelle. Auf der anderen Seite benötigt der Abfrage-Generator weniger Zeit, um zahlreiche Daten in einer oder mehreren Tabellen schneller zu verarbeiten als Eloquent ORM.
In meinem Fall verwende ich ELoquent ORM in einer Anwendung mit Tabellen, die weniger als 17500 Einträge enthalten. Wann immer ich davon ausgehe, dass die Tabelle mehr als 17500 Einträge enthalten wird, ist der Abfrage-Generator der beste.
Außerdem bevorzuge ich in Anwendungen mit Unterabfragen den Abfrage-Generator gegenüber ELoquent ORM.
quelle
Es gibt viele verschiedene zwischen ihnen
quelle
Ich verwende gerne den Abfrage-Generator, wenn ich komplexe Abfragen aus einer Datenbank erstelle, weil sie einfach zu verwenden scheinen. Für die Arbeit mit einem einzigen Tisch mag ich beredt.
quelle