2016-04-07 8 views
0

Ich habe eine Anwendung, die ich mit einem zugegebenermaßen schlechten Datenmodell geerbt habe. Momentan versuche ich, einen Bandaid draufzusetzen.Entity.list() Hibernate Performance

Wir haben eine zunehmend schlechte Leistung festgestellt, da mehr Daten in das System geladen werden, selbst bei Operationen, die mit einer abgefragten Teilmenge der Daten arbeiten sollten (d. H. Ein Datensatz gleichzeitig).

Wir verwenden New Relic und haben festgestellt, dass ein erheblicher Teil unserer Anfrage in EntityName.list() für Transaktionen mit Kriterienabfragen verbracht wird. Keine unserer Entitäten hat jedoch eine list() Methode. Es ist mein Verständnis, dass Kriterienabfragen in SQL übersetzt werden und die Abfrage tatsächlich in der Datenbank-Engine stattfindet, anstatt alle Entitäten aufzulisten und dann die Java-Objekte abzufragen. Ist das genau? Irgendeine Idee, was die list() Methode in New Relic ist?

Nur um klar zu sein, merke ich, dass eine ganze Liste oder select * ... auf einem riesigen Tisch eine Weile dauern würde. Das Problem besteht darin, dass wir Kriterienabfragen verwenden, um die Tabelle abzufragen und nicht alle Datensätze aufzulisten. Meine Frage ist: Woher kommt der Verweis auf Entity.list() in New Relic?

+0

Was auch immer diese 'list' Methode ist, ich denke, es werden alle Zeilen mit einer Abfrage wie' SELECT * FROM TABLE_NAME' ausgewählt. Wenn Ihr Tisch riesig ist, kann das eine Weile dauern ... – jchampemont

+0

Ich denke, VisualVM oder Jprofiler verwenden und decken Sie Ihren Code, wo Sie denken, schlecht und finden Sie Linie zu Schöpfer dieses Problem –

Antwort

0
  • Infact, sollten wir verwenden, um die Liste nicht() -Methode im Allgemeinen eine einfache Verbesserung eines „wählen Sie Feld1, Feld2, ... von ....“ ist Puting und versuchen jedes großes Feld zu entfernen, die Liste (es sei denn, es ist wirklich notwendig)
  • Ein weiterer Einfluss von der Liste ist wegen der Beziehung Schiff. Wenn Sie eine oder mehrere Beziehungen zwischen Entitäten haben, lädt Ruhezustand die verwandten Entitäten, wenn die Beziehung Schiff EAGER, auch mit LAZY, es erfordert noch einige zusätzliche Informationen.

  • Wenn Sie wirklich Liste wollen, versuchen Sie einen Blick auf den Basisdaten zu erstellen und machen Einheiten, die mit dieser Ansicht abgestimmt, es Leistung etwas verbessern kann.

+0

Ich verwende keine Liste. Es gibt keine Listenmethode. Ich benutze Kriterienabfragen, die, soweit ich sagen kann, * kein * select * ... 'machen –