Was ist in Bezug auf die Leistung schneller? Erstellen Sie eine REST-API und lassen Sie Ihre Web-App die REST-API verwenden, um alle Interaktionen mit Ihrer Datenbank auszuführen ODER Ihre Datenbank direkt abzufragen (dh mit welchem typischen Objekt, das Ihre Sprache zum Abfragen einer Datenbank wie JDBC für Java verwendet)?
So sehe ich es mit REST:
- Sie erstellen ein Objekt in Ihrem Code, um die REST-Methode aufzurufen
- Rufen Sie die http-Methode auf
- Code in Ihrer REST-API fragt die Datenbank ab
- Die Datenbank gibt einige Daten zurück
- Der REST-API-Code packt die Daten in Json und sendet sie an Ihren Client
- Client empfängt Json / XML-Antwort
- Ordnen Sie die Antwort einem Objekt in Ihrem Code zu
Auf der anderen Seite können Sie eine Datenbank direkt abfragen:
- Sie erstellen ein Objekt mit einer Abfragezeichenfolge, um die Datenbank abzufragen
- Die Datenbank gibt einige Daten zurück
- Ordnen Sie die Antwort einem Objekt in Ihrem Code zu
Würde dies nicht bedeuten, dass die Verwendung einer REST-API langsamer wäre? Vielleicht hängt es von der Art der Datenbank ab (SQL vs NoSQL)?
Antworten:
Wenn Sie die Komplexität erhöhen, wird der Code langsamer ausgeführt. Wenn Sie einen REST-Service einführen, der nicht erforderlich ist, wird die Ausführung verlangsamt, da das System mehr tut.
Die Zusammenfassung der Datenbank ist eine gute Praxis. Wenn Sie sich Gedanken über die Geschwindigkeit machen, sollten Sie die Daten im Speicher zwischenspeichern, damit die Datenbank nicht berührt werden muss, um die Anforderung zu verarbeiten.
Bevor ich die Leistung optimiere, überlege ich mir, welches Problem Sie lösen möchten und welche Architektur Sie verwenden. Ich habe Mühe, mir eine Situation vorzustellen, in der die Datenbankoptionen Direktzugriff oder REST sind.
quelle
extra work
. Tatsächlich könnte es jedoch schneller sein, wenn wiederholte Abfragen zwischengespeichert werden.Wenn Sie Bedenken hinsichtlich der Geschwindigkeit haben, ist ein Rest-Service aus den oben genannten Gründen langsamer. Die Geschwindigkeit des von Ihnen beschriebenen Typs ist jedoch selten das Hauptanliegen und kann auf andere Weise angegangen werden. Vorzeitige Optimierung ist die Wurzel allen Übels .
Überlegen Sie, ob Ihr Hauptanliegen die Interoperabilität (Mobil, Web, B2B) ist, jetzt ist REST sehr attraktiv, weil es technologieunabhängig ist.
Angenommen, Sie codieren für eine Datenbank. Was würden Sie tun, wenn Sie Ihren zugrunde liegenden Datenspeicher ändern möchten? Wie schwierig wäre es, wenn Sie eng mit dem zugrunde liegenden Geschäft verbunden wären?
Die wirkliche Antwort ist, dass es darauf ankommt , aber ich hoffe, ich habe Ihnen einige Dinge zum Nachdenken gegeben!
quelle
Wenn es schwierig ist, diese Frage zu beantworten.
Die richtige allgemeine Antwort sollte lauten: Es kommt darauf an.
In deinem Denken liegt ein Fehler.
Dieser Fehler beruht auf der Tatsache, dass Sie REST und seine Prinzipien nicht vollständig verstehen. REST wurde nicht erfunden, weil einige Nerds es cool fanden (natürlich ist es das), Javascript-Objekte über HTTP über das Kabel zu senden. Der Hauptvorteil der Verwendung von HTTP ist die Möglichkeit der Verwendung von Caching . Wenn Sie Ihre Ergebnisse machen zwischenspeicherbar , dann gibt es weniger Anfragen an die DB gemacht werden. Und kein Rangieren ist beteiligt. Die Antwort könnte direkt geliefert werden.
Insofern ist @Klees Antwort nicht ganz richtig :
Wenn Sie mit Cacheables-Ergebnissen arbeiten, hat dies keine Auswirkungen auf Ihre Anwendung: Die Übermittlung bekannter Antworten auf bekannte Fragen kann über Reverse-Proxies erfolgen.
quelle
Die Einführung einer zusätzlichen Serviceschicht ist immer mit Kosten für Komplexität und Leistung verbunden. Es gibt einige bestimmte Arten von Architekturen, bei denen die Einführung einer Shared-Service-Schicht (wie einer REST-API) die Leistung aufgrund des Shared-Caching verbessern kann. Dies scheint jedoch nicht die Art von Architektur zu sein, die Sie haben.
Stellen Sie sich eine Architektur vor, in der mehrere Webanwendungen oder Desktopanwendungen direkt mit derselben Datenbank verbunden sind. Wenn sie häufig dieselben Abfragen ausführen, kann dies die Leistung verbessern, wenn Abfrageergebnisse in einem gemeinsam genutzten Dienst zwischengespeichert werden. Besonders wenn Sie sagen, dass Hunderte von Desktop-Apps direkt auf dieselbe Datenbank zugreifen (nicht über eine Web-App!) Und dieselben Abfragen ausführen, könnte dies eine wesentliche Verbesserung bedeuten. Selbst in dieser Architektur wäre der Hauptgrund für die Einführung eines gemeinsam genutzten Dienstes wahrscheinlich eher die Sicherheit und Datenabstraktion als die Leistung.
Es hört sich jedoch so an, als hätten Sie eine einzige Web-App, die eine direkte Verbindung zur Datenbank herstellt. In diesem Fall ist die Einführung einer zusätzlichen Serviceschicht nicht vorteilhaft. Caching, Datenbankabstraktion usw. können auf der Datenzugriffsebene in derselben Anwendung ausgeführt werden.
quelle
Es hängt davon ab, ob.
Je mehr Ebenen sich in Ihrem Code befinden, desto langsamer wird es. Aber ... irgendwann spielt die direkte End-to-End-Leistung weniger eine Rolle als die Skalierbarkeit. Wenn Sie 1 Benutzer haben, der auf Ihre Datenbank auf einem lokalen PC zugreift, kann es schnell gehen. Wenn tausend Benutzer auf demselben PC auf dieselbe Datenbank zugreifen, werden sie wahrscheinlich alle frustriert sein. Die Lösung besteht darin, die Datenbank in eine andere Box zu verschieben, eine Ebene in der Mitte hinzuzufügen. Für 1 Benutzer ist die Leistung jedoch langsamer. Wenn die Tausenden darauf zugreifen, wird sie schneller. (Das ist eine vereinfachende Antwort, aber im Prinzip wahr).
Es gibt andere Gründe, Ihre Datenbank hinter einer Mittelschichtebene zu verstecken, z. B. Sicherheit.
quelle
Ich weiß nicht, wo Sie sich verlaufen, aber es ist ziemlich klar, dass Sie bei Verwendung der REST-API zusätzliche Schritte ausführen und zusätzliche Schritte "immer" bedeuten, dass die Programmierung langsamer ist.
Es gibt Vor- und Nachteile, aber wenn Sie direkt von Ihrer Anwendung aus auf die Datenbank zugreifen können, ist es immer besser, sie direkt aufzurufen, anstatt die Web-API zu verwenden. Wenn Sie die Web-API verwenden, können Sie Ihre Anwendung problemlos auf eine andere Plattform portieren.
quelle
SICH AUSRUHEN :
Lokale DB:
DAS IST EIN GROSSER UNTERSCHIED, DIE MENSCHEN VERGESSEN DIESE PUNKTE
quelle