Sono confuso su come interagire correttamente con il mio database Postgres attraverso la tipica esperienza utente sulla mia app web. Sto cercando un chiarimento sul metodo più efficiente di comunicazione con il database, senza sovrascrittura (spamming).
Attualmente utilizzo org.apache.commons.dbcp.BasicDataSource
per connettermi al mio database ogni volta che è necessario, e chiudo sempre la connessione al termine. Ha perfettamente senso per me quando sto facendo una query di una volta.
Ma se la query può essere eseguita più volte a discrezione dell'utente?
Qui ci sono 2 occorrenze specifiche nella mia app:
- Se un utente immette le proprie credenziali e fa clic su "Accedi" nella pagina di accesso, il database viene interrogato per convalidare le credenziali. Cosa succede se l'utente fa clic sul pulsante 100 volte? Ciò significa che potrebbero potenzialmente inviare spam al pulsante, causando l'invio di più query al mio database. Potremmo imporre un limite manuale (come 5 clic al minuto) ma dove tracciamo la linea?
- Una volta effettuato l'accesso, il loro profilo utente deve essere compilato e possono "Salvare" le modifiche dopo l'attivazione di qualsiasi modifica di campo. Quindi sarebbe molto facile inviare spam maliziosamente il pulsante Salva dopo che un nuovo carattere è stato digitato.
Capisco che una nuova connessione non venga creata ogni volta che viene chiamato getConnection()
, ma non capisco se la meccanica interna di BasicDataSource
gestisca questo potenziale spamming.
Una volta che l'utente fa clic su "Salva", è importante che le modifiche siano accessibili a tutti gli altri utenti. Ad esempio, l'utente A potrebbe fare clic su "Rendi visibili ad altri utenti" e quindi fare clic su "Salva". L'utente B dovrebbe ora essere in grado di trovare l'utente A nella nostra app.
Mi consiglia di utilizzare Connection Pool, Hibernate, Redis, cache2K o qualche altro strumento / framework? O è sufficiente interrogare il database ogni volta che il pool lo ottimizzerà sul back-end?
Grazie mille. Sto usando Java 8 + Vaadin 8.