2016-06-01 6 views
0

Ich arbeite an der Leistungsverbesserung meines Projekts (Spring Project, habe nicht viel Erfahrung im Frühjahr, ca. 7 Monate!), Wo wir gefunden dass der größte Teil des Speichers beim Caching verwendet wird. Nach ein paar R & D fand ich, dass Ehcache mir helfen könnte. In meinem Projekt haben wir statische HashMap verwendet, um die Daten von der DB auf dem Serverstart zu laden, und wir verwenden diese Karte in der gesamten Anwendung. Ich habe ein paar Beispiele für Ecache und Spring gesehen (NICHT Spring Boot), aber ich kann nicht verstehen, wie ich es durch meinen bestehenden Code ersetzen kann, wo es überall HashMaps gibt? Auch wenn es irgendeinen anderen Rat oder Vorschlag gibt, bitte posten Sie es..Ich werde eine große Hilfe sein ..! Es gibt ein paar Links auf Stackoverflow über die gleiche Frage, aber sie haben keine Antworten für sie .. Bitte helfen ..!Laden von Daten aus der DB zum Zwischenspeichern mit ehcache und spring, um bestehenden Caching-Mechanismus zu überschreiben

+1

"HashMaps überall"? Sie sollten an einer Stelle sein - ein Aspekt. Das ist ein großer Teil Ihres Problems. Nichts kann dir helfen, sie zu einem Ganzen zusammenzufassen. Nimm einfach eine Schaufel und fang an zu graben. – duffymo

+0

von 'Überall', ich für alle solche Datenbanktabellen, wo ich die Daten zwischenspeichere. aber es gibt nur 2 Orte, die wegen der riesigen Datenmenge viel Speicher verbrauchen. :) –

+0

Caching, Protokollierung und Transaktionen sind, was aspektorientierte Programmierung geboren wurde. Wenn Sie von HashMaps, die Sie selbst erstellt haben, zu EhCache oder einer anderen Technologie wechseln, werden diese riesigen Einträge nicht kleiner. Sie haben das gleiche Problem mit EhCache. Überdenken Sie, ob Sie so große Objekte zwischenspeichern sollten. Wie oft werden sie benutzt? Sie müssen den klassischen Zeit/Raum-Kompromiss machen. Sie können zwischenspeichern, um Zeit zu sparen, wenn Sie genügend Speicherplatz haben; Du verbringst Zeit, wenn du es nicht tust. Dein Problem ist nicht Technologie. – duffymo

Antwort

2

Wenn Sie die Daten in einer HashMap haben und jetzt einen EHCache verwenden möchten, ist die Zugriffszeit für einen Eintrag, wenn dieser Eintrag bereits im Cache vorhanden ist, mehr als 10x höher als das, was Sie jetzt haben. Siehe "Laufzeitvergleich für Treffertreffer" unter In Process Java Cache Benchmarks.

Wenn Sie Speicherplatz sparen möchten, werden die Zugriffszeiten viel höher, da Sie die Daten bei Bedarf neu laden müssen.

Wenn Ihre Anwendung auf der HashMap ausgeführt wird und keinen Zugriff auf die Datenbank benötigt, nachdem die HashMaps geladen wurden, haben Sie tatsächlich bereits den perfekten benutzerdefinierten Cache für Ihre Anwendung.

+0

Oh ja, nachdem ich deinen geteilten Link durchlaufen habe, erkenne ich es jetzt. Aber ich wollte es trotzdem selbst für mindestens eine meiner DAO-Dateien testen und wie es geht. Wenn Sie etwas zu meinem Zweifel hinzufügen können, wird es großartig .. :) –