2017-10-15 6 views
2

Gibt es irgendwelche Vorteile, HikariCP mit eingebetteten Datenbanken wie SQLite, H2 oder HSQLDB zu verwenden? (die letzten beiden können auch im Servermodus laufen, aber das interessiert mich nicht)Gibt es Vorteile bei der Verwendung eines JDBC-Verbindungspools mit eingebetteten Datenbanken?

Abgesehen von dem Leistungsvorteil (den ich mit eingebetteten Datenbanken wahrscheinlich vernachlässigen würde), bin ich auch an anderen Einrichtungen interessiert, die von der Verbindungspool, der den Code prägnanter und/oder robuster machen könnte.

Ich denke, dass diese Frage unterscheidet sich von this other one in, dass es spezifischer ist, da es sich auf eingebettete Datenbanken und in geringerem Maße auf HikariCP konzentriert.

+0

Mögliches Duplikat von [Was ist der Vorteil von Verbindungs- und Anweisungspooling?] (Https: // stackoverflow.com/questions/457287/which-is-the-benefit-of-connection-and-statement-pooling) – shinjw

Antwort

5

Verbindungspools besteht vor allem durch eine neue Verbindung von Grund auf neu zu öffnen ist eine teure Operation. In der Regel handelt es sich um TCP/IP-Handshake, Verschlüsselung und Protokollaushandlung und -authentifizierung. Es gibt einige Overhead beim Schließen der Verbindung.

Also läuft das letztlich auf die Implementierung hinaus: Öffnet eine neue Verbindung langsam genug, um eine Wiederverwendung zu rechtfertigen? Ein Verbindungspool ist sinnvoll, wenn die Gesamtzeit für das Öffnen von Verbindungen im Vergleich zu der Zeit, die für andere Vorgänge benötigt wird, beträchtlich ist oder wenn das Öffnen einer Verbindung eine kritische Latenzzeit verursacht. Bei eingebetteten Datenbanken sollte der Unterschied minimal sein, da sie im selben Speicherbereich wie das Programm selbst ausgeführt werden.

Ein Verbindungspool hat jedoch auch einen nützlichen Nebeneffekt, da er die maximale Anzahl gleichzeitiger Verbindungen begrenzt. Auf einem Server ohne Verbindungspooling kann ein Angreifer problemlos eine Flut von Anfragen senden, die den Arbeitsspeicher erschöpfen oder einen Denial-of-Service verursachen.

Aus Sicht der Klarheit und Abstraktion von Code sind Verbindungspools auch schön, weil sie vollständig transparent sind. Wenn Sie sich irgendwann entscheiden, von Embedded zu Client/Server zu wechseln, müssen Sie nichts ändern.

+0

Gute Antwort, vor allem die Ressourcen begrenzenden Aspekte. – brettw

1

ich nur ein Fall denken kann,

Wenn Sie in Entwicklung eingebettete Datenbank verwenden und in der Produktion nicht eingebettete Datenbank

Eine eingebettete Datenbank ist während der Entwicklungsphase eines Projektes nützlich

Dann können Sie den gleichen Code für Verbindungspooling mit verschiedenen Datenbanken ohne Codeänderung (mit Abhängigkeitsinjektion) wiederverwenden.

In Spring Fall wählen Sie die zweite Option:

Frühling Jdbc Embedded-Datenbank-Unterstützung kann auf zwei Arten erweitert werden:

  1. EmbeddedDatabaseConfigurer Implementieren einen neuen Embedded-Datenbank-Typen, wie Apache zu unterstützen Derby.

  2. Implementieren Sie DataSourceFactory, um eine neue DataSource-Implementierung, z. B. einen Verbindungspool, zu unterstützen, um eingebettete Datenbankverbindungen zu verwalten.

Verwandte Themen