2016-07-19 5 views
2

Ich habe nach einer Lösung zum Zwischenspeichern gesucht, die eine Datenbank als Speicher verwendet, aber nur mit Abfragecache kommen. Gibt es Lösungen, um eine Datenbank als Speichermechanismus für das Caching von Daten zu verwenden?Java-Lösung für datenbankgestützten Cache

Um etwas Perspektive zu geben, ist mein Problem das Folgende: Ich konsumiere eine Web-Service-Ressource, die viel zeitaufwendiger als Abfragen meiner Datenbank sein könnte. Daher möchte ich die Ergebnisse meiner Webdienstanforderungen in meiner Datenbank zwischenspeichern.

Ich weiß, dass ich das mit der Hand machen kann, aber ich muss eine existierende Lösung da draußen haben, die ich zumindest untersuchen kann, ob sie für meine Zwecke nützlich ist.

Weitere Informationen: Meine aktuelle Projektbibliothek besteht aus Java EE 7 und Hibernate.

Ich hatte gehofft EHCache hatte etwas für mich, aber es scheint nur Speicher oder dateibasierte Lösungen bereitzustellen. Der Speicherbedarf für diesen bestimmten Cache wäre zu groß. Außerdem wird dies in einer Clusterumgebung ausgeführt, sodass die dateibasierte Lösung zu Synchronisierungsproblemen führen würde.

+0

Sie haben ähnliche Frage hier http://StackOverflow.com/Questions/14026041/best-way-to-Cache-restful-apre-results-of-Get-Calls –

Antwort

0

RedHat Infinispan hat ein paar verschiedene JDBC-basierte Speicherimplementierungen, die erlauben, was Sie verlangen. Werfen Sie einen Blick auf: http://infinispan.org/docs/stable/user_guide/user_guide.html#jdbc_based_cache_loaders (Haftungsausschluss: Ich habe keine Erfahrung damit, also kann ich nicht sagen, wie stabil es läuft oder wie komplex es ist, zu installieren).

Im Allgemeinen verwendet eine Datenbank für Cache-Persistenz Pro und Con Argumente. Das Argument Pro besagt, dass Sie die Bereitstellungs- und Ressourcenverwaltung möglicherweise einfacher durchführen können, da die Datenbank bereits vorhanden ist.

Das Con Argument ist, dass die Verwendung einer Datenbank zusätzliche Belastung für das System bedeutet. Bei Cache-Aktualisierungen müssen Sie viele Datenbanktransaktionen durchführen, um die Festplatten zu synchronisieren, und Ihre CPUs warten auf den Abschluss der IO. Für das Zwischenspeichern benötigen Sie dieses Verhalten nicht, da der Datenspeicher temporär ist.

0

Für diese Art von Problemen rate ich normalerweise, eine Lösung basierend auf Warteschlange zu verwenden. Diese Art von Lösungen ermöglicht es Ihnen, Client (Anwendung) zu entkoppeln und Server (Web-Services-Endpunkte), so können Sie diese nicht-blockierende Muster ausführen für:

  • Sie den Kunden nicht blockieren
  • Führen Sie den Vorgang auf Daten empfangen, wenn es sind angekommen
  • Wenn Sie möchten, können Sie die empfangenen Daten in einem DB

ich schlage vor, Sie ActiveMQ zu verwenden, speichern Queue-Funktionen und Apache Camel zu implementieren die Dienstleistungen Call/Transformationen zu verwalten/Beharrlichkeit.

Verwandte Themen