DataBase Vs serializzazione

di il
2 risposte

DataBase Vs serializzazione

Buongiorno a tutti,

sto cercando di imparare un po' di Java, ed ho le idee molto confuse.

Per esercitarmi vorrei creare un modulo, che in futuro potrebbe essere riutilizzato in altri progetti, che gestisca le anagrafiche delle persone.

L’idea è quella di creare una classe Persona che rappresenta ogni singolo soggetto.

Il mio dubbio è come salvare i dati.

Non ho esperienza di sterilizzazione e salvataggio.

Chiedo se potrebbe essere una soluzione il salvataggio di ogni singolo oggetto Persona in uno o più file, o di un unico oggetto Rubrica (una ArrayList, LinkedList, HasMap ???) che contenga tutti gli oggetti Persona.

Questo implicherebbe (credo) ad ogni avvio di caricare tutti i dati riferiti ad ogni singola persona, per poi eseguire le varie operazioni di ricerca, modifica, aggiunta ed eliminazione.

Oppure sarebbe più efficace avvalersi di un database sql ?

In questo caso, cercando in rete, mi sembra non sia possibile salvare gli oggetti. Corretto?

Anche se lo fosse, per fare delle ricerche ad esempio col nome, dovrei comunque estrapolare tutti i dati creare una List con tutte le persone e fare la ricerca. Corretto?

Quindi la soluzione che mi sembra più efficace sarebbe quella di salvare i dati di ogni persona (nome, cognome, etc) in una db sql, come se non fossero oggetti.

Per intenderci ogni riga della tabella persone contiene i dati di ogni oggetto Persona.

Poi, a seconda delle operazioni da eseguire, con i risultati delle varie query sul db creo uno o più oggetti Persona, su cui operare, salvo eventuali modifiche di dati sul db senza però mai salvare gli oggetti.

Questa ultima, mi sembra la soluzione più efficace, ma non vorrei sia dettata dalla mie limitate conoscenze sull’argomento, pertanto chiedo un vs consiglio su quale sia la soluzione più adatta ad per un' implementazione in Java, in modo da partire con lo studio di Java con la giusta impostazione.

Spero di aver spiegato chiaramente il mio dubbi, ringrazio in anticipò chi vorrà darmi qualche suggerimento/commento.

grazie.

2 Risposte

  • Re: DataBase Vs serializzazione

    Da quanto capisco vuoi l'eliminazione dell'intera specie umana ;-) nel qual caso i problemi cesserebbero di esistere ;-)

    03/06/2023 - kiriku70 ha scritto:


    Non ho esperienza di sterilizzazione e salvataggio.

    E', ovviamente, “serializzazione”.

    Il discorso e' lungo quanto un corso annuale all'universita MA per ridurre tutto al minimo, si puo' dire questo

    1. la serializzazione  e' utile SOLO se devi tenere TUTTO in memoria del computer e vuoi, alla ripartenza, riportare TUTTO in memoria, e NON FARE ricerce complicate. Inutile nel 99.9999999% dei casi
    2. il salvataggio, per l'utilizzo che ti serve, VA FATTO SU DATABASE, nel 99.9999999% dei casi

    Ci sono TANTE tipologie di database

    1. i database RELAZIONALI, basati sulla ‘teoria relazionale dei dati’, usati il 99.999% dei casi, e sono ESATTAMENTE quello che ti serve (permettono di salvare oggetti Java! anche se bisogna fare un po' di trasformazioni)
    2. i database GERARCHICI, vecchia gloria  degli anni 60 ritornati di moda e che permetterebbero di salvare un oggetto (anche Java) SE trasformato in formato JSON o XML
    3. i database ad OGGETTI, che permettono di salvare DIRETTAMENTE gli oggetti Java, ma sono COMPLICATI e di uso molto di nicchia.
    4. i database NOSQL, di cui i gerarchici ne fanno parte, e che supportano il salvaggio di dati in organizzazione NON RELAZIONALI , come i database a grafo. Esiste un intero mondo …

    Quindi, assodato che DEVI USARE UN DATABASE RELAZIONALE, va da se che il suo utilizzo VA STUDIATO. Acquista un libro sui database (relazionali) e il loro funzionamento.

    Poi, esiste un'altro “trucco” per “semplificare” il salvataggio di oggetti Java in un DBMS (Database Management Systems) (ma che NON TI RISPARMIA la NECESSITA' di SAPERE ESATTAMENTE come funzione un DBMS relazionale) e cioe' quello di usare un ORM (Object Relational Mapper) che si occupa di trasformare un oggetto in qualcosa che puo' essere salvato su database e viceversa.

    SEMBRA “fighissimo”, MA il suo utilizzo NON E' ESENTE DA CONTROINDICAZIONI, una delle quali e' che BISOGNA PROGETTARE IL TUTTO in modo opportuno (oltre al fatto che gia' di suo un ORM non e' semplicissimo da usare).

    ALTRA COSA DA STUDIARE (moooolto bene)

    Comunque, se NON HAI ESPERIENZA DI PROGRAMMAZIONE (e questo NON DIPENDE dal linguaggio di programmazione) prima di metterti a “trafficare” con in DBMS o gli ORM, e' meglio imparare i concetti FONDAMENTALI con un LIBRO introduttivo. Poi ti serve imparare la “programmazione ad oggetti”, modello/paradigma di programmazione supportato da Java.

    Tieni presente che esistonno MOLTI paradigmi di programmazione, alcuni piu' semplici di altri, e MOLTI linguaggi di programmazione, alcuni piu' semplici di altri.

    Java NON E' una buona prima scelta se devi appena iniziare a imparare.

    ----

    Per fortuna ;-), programmare E" COMPLICATO e “ChatGPT” al di la' delle affermazioni “altisonanti” di OpenAI che con tool del genere TUTTI potranno diventare programmatori ;-) sara' SOLO di aiuto per CHI SAPREBBE FARE IL LAVORO ANCHE SENZA “ChatGPT” ;-)

    ----

    In Java, DBMS relazionali da usare per imparare sono  Derby, SQLite, HSQLDB

    L'ORM piu' usato e' Hibernate

    Meglio che non ti dica QUANTO c'e' da studiare ;-)

    Condoglianze

    (ma non sarebbe meglio dedicare questo tempo per amici/ragazze/i?)

  • Re: DataBase Vs serializzazione

    Grazie migliorabile,

    anche per la correzione dell'errore di battitura,  lo avevo visto nel titolo ma mi è scappato nel testo. 

    Purtroppo a suo tempo non ho avuto la possibilità di andare all'università, pertanto cerco di colmare come posso questa mia aspirazione.

    Non so esattamente cosa intendi con “esperienza di programmazione”, comunque no, non son un programmatore, ma quando posso mi piace passare del tempo ad imparare. Qualcosa ho studiato (come autodidatta), ma tra capire i concetti su un libero e trasformarli un un progetto, la differenza è notevole, credo ci vuole molta pratica (provare, sperimentare, correggere, migliorare, capire). Avere qualcuno che ti può dare un consiglio, correggere un'errata interpretazione o chiarire eventuali dubbi (come in questo caso) sarebbe molto utile, mi eviterebbe di seguire intuizioni sbagliate o la conferma di essere sulla strada giusta.

    Dalla tua risposta, mi sembra che tu condivida la soluzione che avevo individuato, salvare i dati in un DB ed una volta ottenute le query necessarie istanziare gli oggetti per le varie elaborazioni o semplicemente per mostrarli a video. 

    In un certo senso, farei io quello che farebbe per me un ORM, ma visto che il mio scopo è principalmente quello di esercitarmi per imparare, credo sia la cosa migliore, poi eventualmente in una successiva evoluzione potrei rifarlo introducendo (imparando) Hibernate.

    Da smanettone (purtroppo non sono programmatore) ho già pasticciato un po' di mySql e ho le nozioni sufficienti per quello che mi serve per questo progetto, il senso della mia domanda era se c'era un metodo più efficace, adatto allo scopo, più coerente al paradigma OO. Temevo che salvare i dati non come oggetti fosse in contrasto con il concetto di programmazione ad oggetti (uno dei motivi per cui sto cercando di imparare Java). 

    grazie ancora per l'attenzione

Devi accedere o registrarti per scrivere nel forum
2 risposte