PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Avvertenze su Postgres pl/java

In base alla mia esperienza, pl/java presenta alcuni problemi importanti:

  1. È difficile installarlo in un server postgresql. Anche se trovi la build binaria per la tua versione postgresql (che è anche difficile), ha bisogno di un po' di configurazione e di giocoleria del percorso della libreria.
  2. La prima chiamata alla stored procedure java risulterà in un nuovo processo JVM. I processi JVM sono nell'ambito della connessione e richiedono una certa quantità di memoria per l'heap java, quindi se usi il pool di connessioni ti ritroverai con 10-20 JVM avviate e inutilizzate per la maggior parte del tempo, consumando la RAM del tuo server
  3. pl/java può comunicare con il database postgresql utilizzando un driver JDBC autocostruito che emula l'utilizzo JDBC comune, ma presenta alcuni problemi di implementazione che potrebbero sorprenderti. Soprattutto se vuoi usare i cursori JDBC o altre cose non così comuni.
  4. La registrazione pl/java è piuttosto speciale, a causa dell'implementazione della gestione degli errori interni di Postgresql. Ad esempio, se registri qualcosa con java logging api a livello di registro ERRORE, interromperà la connessione al server.
  5. pl/java ha prestazioni di elaborazione dati molto buone rispetto alla logica java basata su server di applicazioni, ma è totalmente non scalabile - le procedure pl/java sono completamente a thread singolo - postgresql vieta le procedure multi-thread
  6. Se utilizzi il driver JDBC interno e la tua istruzione SQL contiene errori, ti ritroverai con un messaggio di errore criptico nel log di postgresql, totalmente estraneo al problema reale.

Di conseguenza, puoi utilizzare le procedure pl/java con un certo successo, ma devi farlo con molta attenzione e probabilmente devi pensare a migliorare il design della tua applicazione.