Wenn es um große Anwendungen mit einer riesigen Datenbank geht, die Millionen von Datensätzen enthält, werden Sie schnell feststellen, dass eine einfache Auswahl, Aktualisierung, Einfügung und Löschung einfach nicht ausreicht.
Sie fangen also an, anders zu denken. Sie erstellen Prozeduren und Trigger, um kompliziertere Dinge direkt in der Datenbank zu erledigen, und das ist nicht sehr gut. Datenbanken bieten eine hervorragende Leistung bei der Ausführung von CRUD-Operationen. Lange Prozeduren? Nicht so viel.
Das Problem mit den Verfahren
Stellen Sie sich nun vor, Sie wechseln zu einer Datenbank, die das Konzept der Prozeduren nicht unterstützt. Was wirst du machen? Sie sind gezwungen, die Prozeduren stattdessen in Ihre Codebasis zu verschieben, wo Sie ziemlich sicher sein können, dass sie nach dem Programmieren in Java immer dort bleiben, unabhängig davon, für welches Datenbankmodul Sie sich entscheiden.
Ganz zu schweigen davon, dass Ihre Prozeduren normalerweise Teil Ihrer Geschäftslogik sind und es keine gute Idee ist, Ihre Geschäftslogik auf Ihre Codebasis und Datenbank zu verteilen.
Idealerweise sollten Sie immer einen Vermittler zwischen der Datenbank und dem Client haben, der seine eigenen Geschäftsregeln implementiert. Der direkte Zugriff auf die Datenbank ist keine gute Idee, da derjenige mit Zugriff direkten Zugriff auf die Tabellen hat und mit den vorhandenen Daten so ziemlich alles tun kann.
Nachteile
- Die Entwicklung dauert länger: Natürlich erstellen Sie ein neues System, das zeitaufwändiger ist, als dem Client einfach eine Datenbankverbindungszeichenfolge zu geben und ihn die Abfragen schreiben zu lassen.
- Komplexer: Komplexität eines Systems> Komplexität einer Datenbankabfrage.
- Der Server erledigt mehr Arbeit: Nicht unbedingt. Mit gutem Design, Caching, ... können Sie die Last vom Datenbankserver auf den des Mediators verschieben.
- Langsamer: In Bezug auf die Entwicklung? Ja. In Bezug auf die Geschwindigkeit beim Abrufen von Daten? Nein. Sie können Ihren Mediator mithilfe von Caches optimieren (z. B. - seit Januar 2016 beliebt - Redis, Elasticsearch) und tatsächlich Daten schneller liefern als eine einfache Datenbankabfrage.
Vorteile
- Die Migration auf andere Plattformen ist einfacher: Migration auf eine neue Datenbank-Engine? Bestimmt. Den gesamten Mediator in eine neue Sprache migrieren? Nicht wirklich.
- Die Geschäftslogik wird auch benötigt, wenn Sie die Datenbank direkt aufrufen. Die Entwicklung wird nicht mehr lange dauern: Wie bereits erläutert, ist das Verfahren problematisch.
- Sicherheit: Mit der richtigen Autorisierung ist es definitiv viel sicherer, einen Mediator zu haben, als einem Benutzer direkten Zugriff auf die Datenbank zu gewähren, da Sie ihn auf die Endpunkte beschränken, auf denen nur die gewünschten Abfragen ausgeführt werden.
- Wartbarkeit: Einer der besten Vorteile eines Mediators. Wenn es einen Fehler in einer API gibt, die Ihre Clients aufrufen, beheben Sie ihn, übertragen den Fix in Ihr VCS-Repository, erstellen Ihren Mediator aus der korrekten Version von VCS, die den Fix enthält, und alle Ihre Clients verwenden den Fix plötzlich, ohne dass sie dies benötigen Laden Sie ein Update herunter. Dies ist einfach unmöglich, wenn die Abfragen direkt in den Clientanwendungen gespeichert sind. In diesem Fall müssen Clients ihre Anwendung aktualisieren.
Security issues
als Nachteil für die REST-API?