2017-03-21 6 views
0

Ich muss eine XML-Datei verarbeiten und dafür muss ich ~ 4k Objekte mit seinem Primärschlüssel aus einer einzigen Tabelle zu bekommen. Ich benutze EhCache. Ich habe wenige Abfragen wie folgt:Laden Sie mehrere (viele) Objekte aus der Datenbank, speichern Sie es in ehcache und fragen Sie es mit Primärschlüssel

1) Es dauert viel Zeit, wenn ich Zeile für Zeile basierend auf ID abfragen und es im Cache speichern. Kann ich zu Beginn abfragen und die gesamte Tabelle in EHCache speichern und kann sie später in der Verarbeitung mit dem Primärschlüssel abfragen

2) Ich möchte nicht Abfragecache verwenden. Da ich 4k Objekte nicht gleichzeitig laden kann, um das korrekte Objekt zu finden.

ich für eine optimale Lösung suchen, wie jetzt mein Prozess etwa 2 Stunden nimmt (es beinhaltet eine andere Verarbeitung zu)

Dank für Ihre Hilfe danken.

Antwort

0

Sie können die gesamte Tabelle lesen und in einer Map<primary-key, table-row> speichern, um den Overhead der DB-Verbindung zu reduzieren.

Ich denke, ein TreeMap ist wahrscheinlich die beste Wahl, es macht die Suche nach Elementen schneller.

Ehcache ist großartig, um Konkurrenz zu behandeln, aber wenn Sie die XML mit einem einzigen Prozess lesen, brauchen Sie es nicht einmal (speichern Sie einfach die Map im Speicher).

+0

In der Tat, wenn Sie die Daten einmal für einen bestimmten Zweck verwenden, müssen Sie nicht wirklich zwischenspeichern. Sie benötigen eine Karte. Jedoch keine 'TreeMap'. Das wäre viel langsamer. Sie fragen nach ID. HashMap ist in Ordnung und schneller. Oder verwenden Sie eine ConcurrentHashMap, wenn Sie parallel arbeiten. Führe einen addAll darauf aus. Für Ehcache gibt es eine loadAll-Funktion. Aber es fühlt sich nicht so an, als ob Sie ein Caching-Framework benötigen. – Henri

+0

4k Objekte geladen im Speicher zu haben, ist keine gute Lösung, denke ich – Khushi

Verwandte Themen