Programma con database "online"

Forum di discussione sul linguaggio Java e JSP

Moderatore: Toki

Regole del forum
Leggi: IProgrammatori.it - Regolamento Forum
spx
New Entry
Messaggi: 3
Iscritto il: 09 ott 2017, 23:20

Programma con database "online"

Messaggioda spx » 09 ott 2017, 23:32

Ciao a tutti! Cerco di riassumervi la mia situazione:
sono uno studente di informatica e per l'esame di basi di dati ho creato un database locale con oracle ed un programma java che interagisce con questo database per effettuare inserimenti, modifiche e cancellazioni. Vorrei sapere, solo per mia curiosità, come si crea un programma java che interagisca con un database NON locale. Consideriamo un banale esempio di una catena di negozi che si collegano ad un unico database per verificare la disponibilità dei prodotti. Quello che vorrei sapere non è come fare ciò passo passo (mi rendo conto che sarebbe lungo da spiegare) ma vorrei avere una spiegazione tecnica/strutturale per capire come è impostato il tutto per raggiungere questo scopo. Si tratta di mettere il database su un server e creare un'applicazione client che invia query al server e riceve da quest'ultimo i risultati delle query? Altro? Come detto vorrei sapere quali sono gli elementi coinvolti per realizzare una cosa del genere. Grazie a tutti
Avatar utente
andbin
Utente Senior
Messaggi: 2801
Iscritto il: 30 ott 2013, 21:51
Località: Torino
Contatta:

Re: Programma con database "online"

Messaggioda andbin » 10 ott 2017, 08:35

spx ha scritto:Vorrei sapere, solo per mia curiosità, come si crea un programma java che interagisca con un database NON locale.

Se un host espone direttamente il DBMS sulla/e porta/e di networking necessarie, allora basta solo usare nome host/IP di quella macchina. Tutto qui. Che sia su una rete LAN o una più ampia. La questione invece è un altra ... cioè quando si arriva su internet. Su internet difficilmente troverai che qualcuno espone direttamente un DBMS. Questo per questioni di "sicurezza". Tutti gli hosting (PHP, .NET, Java ecc...) che offrono anche un DBMS (MySQL o altro), NON espongono mai direttamente il DB su internet!
A meno che tu abbia una tua macchina ospitata da qualche parte in una server farm e di cui ci fai quello che vuoi, per cui "apri" le porte ed esponi quello che ti pare (a tuo rischio e tua responsabilità, ovviamente).

spx ha scritto:Consideriamo un banale esempio di una catena di negozi che si collegano ad un unico database per verificare la disponibilità dei prodotti.

Dipende cosa si deve fare con il DB. Se solo banali interrogazioni puntuali o se invece ci deve essere della logica di "business" più complessa che direttamente su un DB non necessariamente è facile/possibile. In tal caso meglio mascherare il DB mettendo davanti una web application che espone verso i client "servizi" di qualche tipo (SOAP, REST, ecc...).
Andrea, www.andbin.net — Senior Java developer — SCJP 5 (91%) – SCWCD 5 (94%)
Il mio blog sulla programmazione
+m2+
Utente Senior
Messaggi: 448
Iscritto il: 10 mag 2017, 18:22

Re: Programma con database "online"

Messaggioda +m2+ » 10 ott 2017, 12:07

Andiamo per ordine, distinguendo lato sistemistico da lato applicativo.
Dal punto di vista sistemistico le prestazioni (e sicurezza) migliori si ottengono con un tunnel ssh.
In sostanza sul client avrai "qualcosa" che apre una connessione ssh con il server, veicolando il traffico di una certa porta (o intervallo di porte TCP) lì sopra.
In questa fattispecie non c'è differenza tra le applicazioni: funzionano nello stesso modo "in locale" e "in remoto".
E' una tecnica frequente, collaudata, ben funzionante e sicura.

Richiede però l'instaurazione di questo "tunnel", cosa banale in altri ambienti (es. delphi), non ti so dire per java.

Lato applicazione puoi, come segnalato, creare una sorta di "filtro", cioè un'applicazione che funziona sul server e risponde alla richieste.
Però sono lente, complesse, spesso insicure rispetto al sistema "brutale".

Lato applicazione, nel caso di un utilizzo "remoto", va posta grande attenzione a limitare al massimo le query che si predispongono.
Mentre non è un problema qualcosa del genere

Codice: Seleziona tutto

select * from clienti
in rete LAN, può essere un grave errore quando interroghi remotamente, perchè il dataset lo devi reperire, e questo può essere assai grande (pensa a decine di migliaia di clienti e magari un centinaio di campi) e richiedere secondi o anche decine di secondi per "arrivare".
Ovviamente un'applicazione che si "congela" per 10 secondi ogni volta che mostra l'elenco dei clienti (in questo esempio) è pessima.

Quindi ridurrai al massimo il numero dei campi prelevati (proiezione) e anche il numero delle righe (selezione), in modo da reperire "pacchetti" di dati (sul tunnel puoi comprimerli, ma c'è comunque un overhead dovuto all' "accrocchio", più quello proprio telematico) di modeste dimensioni.

Se progetti "fin da subito" l'applicazione in questo modo può funzionare dignitosamente anche in ambito distribuito (tipicamente meglio rispetto ad applicazioni web o simili).
Inoltre, quando funziona in locale, è ancora più veloce e reattiva (proprio perchè riduce sensibilmente il carico di trasmissione)
Avatar utente
Toki
Amministratore
Messaggi: 3024
Iscritto il: 28 gen 2001, 14:35
Contatta:

Re: Programma con database "online"

Messaggioda Toki » 10 ott 2017, 12:53

Ciao,
se l'applicazione prevede una connessione "diretta" col database remoto: tunnel ssh / VPN.

Se invece vuoi fare un'architettura più sofisticata devi aggiungere uno strato software tra applicazione e database, un Web Service.
a. l'applicazione dialoga con il web service(remoto) utilizzando le funzionalità che gli sono consentite.
b. Il web service:
1 riceve la chiamata
2 interagisce col database/fonti/sistemi secondo la logica di business
3 elabora le informazioni e restituisce i dati al chiamante.
spx
New Entry
Messaggi: 3
Iscritto il: 09 ott 2017, 23:20

Re: Programma con database "online"

Messaggioda spx » 11 ott 2017, 20:00

Grazie a tutti per le risposte! Ho un raspberry pi3, potrei usarlo come server per fare un pò di pratica? Potete linkarmi qualche buon manuale a riguardo? Grazie ancora

Torna a “Java”

Chi c’è in linea

Visitano il forum: Ansharja, KuroKami69 e 50 ospiti