Performance JPA

Diskutiere Performance JPA im Data Tier Forum; Hallo, vermutlich ziemlich allgemeine Frage, aber ich stell sie trotzdem mal. wenn bei einer Webanwendung zwischen den submit-Klicks per JPA...

  1. JanHH
    JanHH Mitglied
    Hallo,

    vermutlich ziemlich allgemeine Frage, aber ich stell sie trotzdem mal.

    wenn bei einer Webanwendung zwischen den submit-Klicks per JPA auf die Datenbank zugegriffen wird, wieviel kann man JPA da "zumuten", ohne das die Performance signifikant leidet und man mehrere Sekunden auf den nächsten Screen warten muss?

    Also wenn man bspws. 50 oder 100 Datenbank-Zeilen aus diversen (durchaus Millionen Einträge langen) Tabellen holt, die Werte ändert und wieder schreibt, wobei die Zugriffe relativ simpel sein dürften weil die IDs der relevanten Zeilen bekannt sind.. geht das oder bei was für Auslastungen ist da so die Grenze? Wenn man mal davon ausgeht, das durchaus dreistellige Mengen an Usern auf die Anwendung zugreifen?

    Mir ist auch klar dass das stark von dem verwendeten Servern abhängt.. aber wenn man mal von Postgresql, JBoss 6, und "durchschnittlichen Servern" ausgeht?

    Gruß+Danke
    Jan
     
  2. Vielleicht hilft dir dieser Kurs hier weiter --> (hier klicken)
  3. KSG9|sebastian
    KSG9|sebastian Aktives Mitglied
    Was soll man darauf Antworten?

    Das hängt ausschließlich vom Design, den Servern, der Datenbank, optimierte Tabellen, Indizes und weiß Gott von was ab. Aber mit JPA hat das Thema primär eigentlich nix zu tun.
     
  4. nillehammer
    nillehammer Guest
    Es gibt zwar die Tendenz, dass DB-Zugriffe per JPA langsamer sind, als plain JDBC. Das liegt aber eher an schlechten Mappings. Insofern stimme ich der o.a. Aussage zu.
     
  5. KSG9|sebastian
    KSG9|sebastian Aktives Mitglied
    Vollkommen richtig..aber das lässt sich im Vorfeld natürlich schwierig beurteilen. Wenn das Mapping sauber ist, die Indizes korrekt sind lässt sich schon mal sehr viel rausholen.

    Während der Entwicklung und auch danach sollte man sich aber die teuren Querys anschauen und da nochmal optimieren. Im Vorfeld lässt sich das halt nicht tun, da gibt es eher so die Grundlagen zu beachten:

    - Normalform ist schön, wenn aber jede Abfrage 30 Joins benötigt ist es weniger schön
    - 1:1-Referenzen embedden
    - korrekte Indizes
    - Model/Mapping allgemein optimieren
    ...

    Langsam wird es ohnehin auch sehr gerne beim Mapping auf Objekte. 150000 Datensätze zu lesen bringt normal noch keine wirklichen Probleme mit sich, daraus aber Objekte zu bauen und über die Leitung zu schicken ist schon eine ganz andere Nummer was Performance angeht...
     
  6. JanHH
    JanHH Mitglied
    Danke für die Antworten. Naja gehen wir davon aus:

    - es sind keine Joins notwendig
    - fast alle Objekte lassen sich direkt per ID finden, es sind so gut wie kein Querys notwendig
    - das objekt-Design ist ziemlich optimal
     
  7. KSG9|sebastian
    KSG9|sebastian Aktives Mitglied
    Dann hast du kein Performance-Problem im JPA-Layer :)
    Wichtig ist dann noch, wie schon gesagt, senden der Objekte zum Client. Da musst du aufpassen das du 1) nicht viel zu viel unnötiges lädst und 2) nicht so wenig lädst das ständig lazy-loading zuschlägt

    Vom Ansatz her mal ganz primitiv: Alles was direkt dargestelt werden soll per fetch-join, alles was über weitere Klicks erreichbar ist lazy.
    Sobald das Benutzerverhalten/fachlicher Kontext klar ist kannst du da weiteroptimieren.
     
  8. JanHH
    JanHH Mitglied
    Also auch dann keine Probleme zu erwarten wenn 50-100 Zeilen aus der Datenbank (aus diversen, verschiedenen Tabellen) gelesen, geändert und wieder geschrieben werden sollen?
     
  9. Ullenboom
    Ullenboom Mitglied
    Bei so wenig Daten lacht Java, JPA, der JDBC-Treiber, und die Datenbank dich aus, dass du nicht mehr Arbeit gibst. Der JPA-Layer kostet dich ein paar Millisekunden, doch die fallen bei deinem Szenario wohl nicht ins Gewicht.
     
  10. nillehammer
    nillehammer Guest
    Zumindest Punkt 1 wage ich zu bezweifeln. Wenn die Klassen untereinander Beziehungen haben, wird es zumindest dafür JOINs geben. Auch wenn Du sie nicht selbst implementierst, macht JPA das unter der Haube. Das verändert aber die sonst gemachten Aussagen nicht wesentlich.
     
  11. JanHH
    JanHH Mitglied
    Ne, haben weitgehend keine Beziehungen. Lauter einsame Entities.. :-(

    Kollege meinte noch, 100 Millionen Zeilen lange Tabellen wären zwar an sich kein Problem, aber man muss schon ein bisschen optimieren bei der Konfiguration der Datenbank. Partitionierte Tabellen und so. Klang plausibel. Also Datenbank geschickt anlegen, dann gehts.
     
Die Seite wird geladen...

Performance JPA - Ähnliche Themen

JavaFX ListCell Performance
JavaFX ListCell Performance im Forum AWT, Swing, JavaFX & SWT
Performance Loop vs Streams
Performance Loop vs Streams im Forum Plauderecke
Miserable Performance beim Ändern der Hintergrundfarbe von JLabels
Miserable Performance beim Ändern der Hintergrundfarbe von JLabels im Forum AWT, Swing, JavaFX & SWT
"Allgemeine" Performance verbessern (LWJGL 2)
"Allgemeine" Performance verbessern (LWJGL 2) im Forum Spiele- und Multimedia-Programmierung
Performance Probleme wegen vieler Objekte
Performance Probleme wegen vieler Objekte im Forum Allgemeines EE
Thema: Performance JPA