Autore Topic: SQLite o non SQLite?  (Letto 4071 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
SQLite o non SQLite?
« il: 06 Maggio 2009, 09:34:47 »
Sul titolo attribuito alla presente discussione, mi aspetto una domanda del tipo: Che c'entra ora un tale dubbio? :incredibile:

In effetti fino a ieri non me l'aspettavo nemmeno io, però, mentre cercavo un esempio di sintassi per l'accesso ad una tabella del DB tramite l'inmpostazione della sua chiave primaria, mi sono imbattuto in un post di md9327 che dice
Citazione
Riguardo a sqlite le tipologie di dato che gestisce sono solo "1", ovvero stringa

Perciò, pensando alla struttura tabellare già costruita con campi di tabella che vanno dal classico formato stringa, gestito in SQLite, al formato integer, byte e float, mi sono chiesto: ma allora come faccio a gestire detti formati?, Convertendo tutto in formato stringa, una data, comprensiva di hh:mm:ss,  porterebbe la sua occuopzione su disco a 16 crt (al posto degli 8  del suo formato ordinario), mentre un numero con 8 cifre nel formato stringa occuperebbe il doppio dello spazio necessario per un formato integer. La stessa considerazione si può fare per un numero float.
A parte ogni considerazione sul fatto che la dimensione dello spazio occupato, sia in mememoria che su disco non fa più paura a nessuno, resta l'imèpegno di volta in volta di dovere convertire il dato e in fase di lettura e in fase di scrittura.
Eppure la guida SQLite3 parla dei seguenti tipi di dati:
Citazione
Each value stored in an SQLite database (or manipulated by the database engine) has one of the following storage classes:
*  NULL. The value is a NULL value.
*  INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.
*  REAL. The value is a floating point value, stored as an 8-byte IEEE floating point number.
*  TEXT. The value is a text string, stored using the database encoding (UTF-8, UTF-16BE or UTF-16-LE).
*   BLOB. The value is a blob of data, stored exactly as it was input.

Per finirla qui, sono tornato al punto di partenza, con la considerazione:
Citazione
ma allora SQLite3 non fa al caso mio, e allora sono costretto buttare tutto il lavoro svolto? Ma, cosa mi conviene utilizzare?

Poi dal mio cervello é arrivato un altro interrogativo: perché gli amici del Forum tifano così tanto per SQLite3, tanto da avviare la scritrtura di una guida apposita? :uhm:  :fuso:
Ciao a tutti.
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: SQLite o non SQLite?
« Risposta #1 il: 06 Maggio 2009, 13:03:02 »
Fai bene a farti queste domande, perchè ti obbligano a cercare alternative valide; se poi trovi che quello che hai già fà al tuo caso, bè allora và bene lo stesso.

Piccola nota: è vero che nella doc ufficiale di sqlite, sono descritti alcuni tipi di dato che il motore gestisce, ma è pur vero che questo viene fatto solo dal motore stesso, e in modo alquanto empirico. La momeorizzazione vera e propria sul db avviene sempre e comunque come stringa. Questa logica, da un lato, permette di semplificare molto un motore, ma ha ovviamente i suoi limiti.
Tieni conto che di motori simili ve ne sono altri, e molti hanno svariati anni di sviluppo (vedi DB3+ ...). La gestione di questi database doveva essere fatta a programma, ovviamente usando istruzioni specifiche.

Ora, la scelta e l'utilizzo di un motore, piuttosto che un'altro, oppure decidere di utilizzare un server apposito (vedi PostgreSQL, MySQL, ecc.), dipende da uno cosa vuole fare, dalle sue conoscenze (ovviamente tutto si può imparare...), e dal tempo che vuole dedicarci.

Inoltre, e questo dipende dalle proprie esperienze e conoscenze, costruire un buon programma di gestione di un database, prevede anche un'impostazione ad-hoc del codice, creando un'apposito strato, tale da permettere facilmente un cambio del database.

Detto questo, io penso che una piccola analisi iniziale del problema tu te la sei già fatta prima dello sviluppo, e penso pure che tu abbia scelto sqlite per la semplicità d'uso e sulla base delle tue esperienze e conoscenze personali, per cui non vedo quale sia il problema... Credo sia abbastanza noto che un codice può essere evoluto, modificato e riadattato nel tempo, per cui nulla ti impedisce, una volta definita la logica funzionale del tuo progetto e che alla fine il programma funziona, di rimetterci su mano per evolverlo in qualcosa di più professionale, e sempre basato sulle tue nuove conoscenze, acquisite con le prime versioni del codice, o le nuove esperienze che avrai accumulato nel frattempo per altri versi.

Io credo che, anche a seguito della tua giusta domanda, di continuare nel progetto, poi si vedrà... non puoi pretendere di creare di botto la perfezione assoluta....

Buon lavoro!

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: SQLite o non SQLite?
« Risposta #2 il: 06 Maggio 2009, 16:49:45 »
Citazione

picavbg ha scritto:
Poi dal mio cervello é arrivato un altro interrogativo: perché gli amici del Forum tifano così tanto per SQLite3, tanto da avviare la scrittura di una guida apposita?
Ciao a tutti.


SQLite è un DB snello, leggero e che è contenuto in un unico file, come ad esempio gli MDB di Microsoft. Il vantaggio di usare SQLite si ha quando si devono trattare dati solo in locale e non in mole considerevole. Rispetto a DB quali MySQL o PostGre, che girano su server, può risultare conveniente: se devi, ad esempio, memorizzare un'agenda telefonica, è inutile installare un server MySQL, è uno spreco di risorse. Basta un piccolo DB, in un file, da interrogare quando hai bisogno di ricercare un numero di telefono o l'indirizzo di qualcuno.

Intendiamoci, SQLite non è una "schifezza"! Mozilla lo usa come DB per la memorizzazione dei dati, ad esempio. E nessuno si è mai lamentato a proposito.

Insomma, l'analisi di un progetto serve anche a stabilire inizialmente il tipo di strumenti necessari alla realizzazione di esso, e lo studio di cosa il progetto deve fare deve passare anche dalla scelta del tipo di supporto per i dati.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: SQLite o non SQLite?
« Risposta #3 il: 06 Maggio 2009, 18:02:46 »
Citazione

leo72 ha scritto:
.......................
SQLite è un DB snello, leggero e che è contenuto in un unico file, come ad esempio gli MDB di Microsoft. Il vantaggio di usare SQLite si ha quando si devono trattare dati solo in locale e non in mole considerevole.
............................
Insomma, l'analisi di un progetto serve anche a stabilire inizialmente il tipo di strumenti necessari alla realizzazione di esso, e lo studio di cosa il progetto deve fare deve passare anche dalla scelta del tipo di supporto per i dati.

 Hai perfettamente ragione, solo che io parto da un'analisi già scritta qualche anno fa, quando avevo a disposizione uno strumento di programmazione dell'ambiente Microsoft (VB) che si appoggiava DB che contemplavano tutti i "datatype", come per es. Access. Nei miei primi approcci con SQLite3 sicuramente ho letto dell'utilizzo di unico "DataType", stringa, ma preso da tante novità da mettere insieme, dentro la mia valigia di Linux-Gambas-DB, non ho nemmeno fatto caso all'allarme "stringa"; poi, però, durante il viaggio, in una delle soste, aprendo la valigia ho sentito odore di avariato. :-)
Non voglio assolutamente criticare o lamentarmi di SQLite3; voglio soltanto dire che non fa per me e per la mia maniera di pensare l'organizzazione dei dati. Come un vestito che vedi in vetrina, ti piace lo vuoi comprare, lo provi, ti fai convincere dalle parole del fornitore, ma quando lo indossi per la prima volta, ti accorgi che il difettuccio a te da molto fastidio e non riesci ad indossarlo.
Per tornare al mio progetto, il mio DB comprende 10 tabelle, tutte contenenti campi in ghran parte numerici, siano essi codici ID, date, orari, importi, con e senza virgola, e dovrebbe gestire i movimenti contabili familiari per almeno 10 anni, prima di avviarli alla storicizzazione; quindi la sola Tabella dei movimenti giornalieri dovrà ospitare mediamente, diciamo 4 movimenti al giorno, cioé 1460 movv. annui, cioé ancora 14.600 movimenti in dieci anni. Quindi credo che non possa definirsi proprio piccolo. Però visto che PostgreSQL e MYSQL sono DB client/server, mi occorrerebbe una struttuta che possa girare bene su un PC Desktop, ma che sia anche un pò più robusta di SQLite3. Ora io non so se per SQLite3 gestire un DB di detta portata può essere pesante.  :roll:
Citazione
Ho letto che Gambas può gestire anche DB come Firebird,  ODBC, pdgin.
Ma, restando sempre fermo ad un utilizzo di tipo stand-alone, dove posso trovare ulteriori notizie per poi scaricare quello che effettivamente fa al caso mio?:-(
  :ciao:
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: SQLite o non SQLite?
« Risposta #4 il: 06 Maggio 2009, 18:26:24 »
Tieni conto che, se parliamo di dati entro il 1 milione di record, và bene tutto... sempre se hai un pc decente (non serve molto...).

Come scritto da leo, se la struttura dei dati e il numero di informazioni che devi trattare superano un certo livello, allora devi direzionare il tuo impegno verso RDMS più seri.

Io ho sempre asserito la mia non proprio grande simpatia per sqlite, ma solo per il fatto che di norma tratto dati in maniera molto pesante; tanto per la cronaca uso normalmente Oracle e PostegreSQL, e a volte ho utilizzato anche MySQL se la logica lo permetteva (solo per la velocità...).

Sempre tanto per dire, io anche sempre "MOLTO POCO AMATO" Access, anche solo per il fatto di essere stato costretto a volte al porting di vecchie strutture fatte con questo motore, e costruite da autentici maneggioni, ma i cui dati che avevano assunto impartanza vitale, e dimensioni tali da ricorrere forzatamente a DBMS più consoni.

Come ho già scritto, credo che al momento ti convenga basarti su strumenti più semplici, per poi evolverli in un secondo tempo a cose più articolate; tieni conto che per mettere su un server PostgreSQL o MySQL non serve una laurea in informatica, e ad oggi gli strumenti per gestirli in maniera semplice ci sono, ma è ovvio che un pochino di esperienza e di conoscenza devi averne, per cui puoi sempre ricondizionare il tuo programma una volta acquisite.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: SQLite o non SQLite?
« Risposta #5 il: 06 Maggio 2009, 21:18:47 »
Citazione
Poi dal mio cervello é arrivato un altro interrogativo: perché gli amici del Forum tifano così tanto per SQLite3, tanto da avviare la scrittura di una guida apposita?  


perchè non scriverla?


se non sbaglio il tuo programma l' hai già realizzato, quindi se funziona bene non vedo perchè porti questi problemi.

se poi hai paura che quando lo avrai riempito di 10 anni di dati possa essere lento potresti fare un programminno che te lo riempa di dati (come dopo 10 anni di inserimenti)e poi vedi come si comporta.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: SQLite o non SQLite?
« Risposta #6 il: 06 Maggio 2009, 21:51:37 »
Citazione

fsurfing ha scritto:
perchè non scriverla?
se non sbaglio il tuo programma l' hai già realizzato, quindi se funziona bene non vedo perchè porti questi problemi.
se poi hai paura che quando lo avrai riempito di 10 anni di dati possa essere lento potresti fare un programminno che te lo riempa di dati (come dopo 10 anni di inserimenti)e poi vedi come si comporta.

Hai ragione, ho esagerato e ti chiedo scusa. Quello che non riesco a capire e mi farebbe piacere ricevere un chiarimento é:
Citazione
Perché nel Forum l'unico DB citato in ambiente unico (senza server), é SQLite? Come se non ci fosse un'altro tipo.

Io non m'aspettavo che gestisse solo dati in formato stringa. Ora, visto che il mio progetto é ancora allo stadio iniziale, prima di cominciare a scrivere record, vorrei abbandonarlo e passare ad un altro motore che sia. però, in grado di gestire i datatype che mi servono. Nessuno fino ad ora mi ha dato un riferimento. Ciao.
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: SQLite o non SQLite?
« Risposta #7 il: 06 Maggio 2009, 22:14:31 »
non ti rimane che informarti sul funzionamento e sulla struttura di db ODBC firebird

poi magari ti ritroverai allo stesso punto!

del resto da nessuna parte è scritto che sqlite3 non accetti datatype,

poi però utenti con molta esperienza (non solo in gambas )come md9327 ci fanno capire che alcuni comportamenti in casi particolori sono dovuti al fatto che internamente al motore del db i dati sono trattati come stringhe indipendententemente dal datatype di appartenenza.

chi ti garantisce che una volta trovato un altro motore non arrivi qualcuno che ti dice che in realtà non utilizza datatype?

cmq da quida gambas supporta:


PostgreSQL    
MySQL    
SQLite
SQLite 3    
ODBC    

e forse firebirt

usa san google per capire quale fa per te

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: SQLite o non SQLite?
« Risposta #8 il: 06 Maggio 2009, 22:59:44 »
Il mio gestionale in Gambas che usiamo a lavoro era stato scritto inizialmente con appoggio dati su SQLite3 e, nonostante un anno e più di documenti memorizzati, archivio clienti, movimenti di cassa e pagamenti vari, non faceva un grinza a livello di prestazioni.

Un annetto fa ho però dovuto convertire il tutto a MySQL perché ad un certo punto le esigenze erano cambiate e necessitavamo di una seconda installazione del programma su un altro PC. La soluzione scelta era stata quella di condividere il DB (via NFS) ma le prestazioni erano schifose. Alla fine ho optato per MySQL: ho installato il server, ho configurato il tutto tramite tool grafico, ho creato una piccola utility che mi facesse il caricamento dei dati e mi sono tolto il pensiero.

Ripeto, ho scelto MySQL solo per via del fatto che dovevo accedere ai dati da 2 PC collegati in rete, non certo per le prestazioni scadenti di SQLite3. Anche il mio gestionale tratta dati in formato differente (boolean, numeri, stringhe, date) ma non fa un controllo certosino di come i dati vengano memorizzati: l'importante è che ciò che leggo sia uguale a ciò che ho salvato. A me poco importa se il DB mi dice che usa un float e poi salva una stringa: se da 12.3 ri-ottengo 12.3 sono a posto ;-)
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: SQLite o non SQLite?
« Risposta #9 il: 07 Maggio 2009, 01:13:19 »
Qui ti devo dare un pochino di torto, leo.

Come vengono memorizzati i dati ha importanza, eccome!

E' probabile che tu non abbia mai avuto a che fare con le date, per esempio... E' vero che se tratti tutto come una stringa, il problema non si pone, ma non si pone solo se la tua applicazione è l'unica che gestisce il db. Metti conto, sempre per fare un esempio, di trattare dati provenienti da fonti diverse, magari fuori dell'ambito nazionale, oppure di fare calcoli particolari du numeri, senza doversi preoccupare di qual'è, e se è presente, il carattere separatore dei decimali, oppure (e ritorno al problema degli spazi), di avere stringhe altamente variabili (addirittura documenti o foto) in quantità enormi, come te la cavi?
Certo, la cosa è risolvibile, come in tutte le cose a livello software, ma devi mettere mano al codice per forza.

Quando parliamo di un DBMS (o RDBMS), a livello server, non parliamo solo di un motore, bensì di un applicazione server a tutti gli effetti, che è indipendente da cosa e da chi ci stà attaccato.

Come ho già menzionato, ci sono, e ci sono stati, già svariati motori simili a sqlite; non dico che bisogna buttarli al secchio, solo che hanno dei limiti, e grossi se confrontati a server evoluti.
Il discorso vero stà nel fatto che la scelta di usare un semplice motore, piuttosto di un server evoluto, è dipendente sempre e solo da cosa si vuole ottenere e quali sono le risorse a disposizione. E' ovvio che per costruirmi un'agendina, non vado a comprare un Oracle Enteprise (anche se la scelta potrebbe anche dipendere da altri fattori).

Un discorso più realistico, sarebbe quello di dire: "bene, ora voglio imparare come funziona e come installare e pilotare un DBMS; metto su un'applicazioncina, e provo a far funzionare il tutto, allo scopo di imparare". In questo caso, la scelta ha uno scopo che prescinde dalle risorse impiegate: imparare!

Sempre come ho già più volte scritto, sqlite lo paragono ad un database scritto su file di testo, con in più la possibilità di interfacciarmi tramite il linguaggio SQL che, rivolto a sqlite, ha un set molto limitato.
Qualcuno ha mai usato i trigger, o le stored-procedures ? La possibilità di avere strumenti di questo tipo ha enormi vantaggi, e questo sqlite, almeno per ora, ne è privo. Non sò se l'autore di sqlite implemeterà mai cose del genere, e personalmente ho molti dubbi in proposito, perchè si scontrerebbe con sistemi già belli che evoluti e funzionanti, a meno che non lo faccia anche per puro divertimento, o per imparare lui stesso.

Questo è il mio pensiero... (almeno per stasera, domani vedremo... :-) )

Comunque, per ritornare alla richiesta iniziale del nostro amico, voglio dare un paio di suggerimenti, visti i suoi dubbi, e il voler prevedere eventalità future:

1) imparare ad usare MySQL, sistema molto veloce con, però, parecchie features non proprio standard e abbastanza personali; da tener conto che però se l'è comprata la SUN, e che la SUN è stata ora acquistata dalla Oracle, per cui non si sà quale futuro abbia...

2) imaparare ad usare PostegreSQL, sistema molto robusto, open-source, ma di molto simile ad Oracle, anche se ad oggi non ha tutte le stesse caratteristiche; il sistema è ormai integrato in tutte le distro, e già di base funziona subito, anche senza modificare alcuna configurazione.

In tutti e due i casi, dopo aver letto almeno qualcosina a riguardo, c'è un buon numero di strumenti per l'amministrazione del server e la gestione dei database, per cui non vedo grandi difficolta a metter in piedi anche una semplice "agendina". Fatto il primo passo, il resto e semplice...

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: SQLite o non SQLite?
« Risposta #10 il: 07 Maggio 2009, 06:56:35 »
Come hai intuito, non sono stato a spiegare il motivo della mia affermazione su come vengono memorizzati i dati nel DB perché appunto la mia applicazione è l'unica che gestisce quei dati (è un gestionale da ufficio) e so perfettamente, avendo creato io il codice, come i dati siano memorizzati e come, quindi, li ritrovi in fase di lettura.
Certo, questo non è l'approccio più informaticamente corretto al problema perché, appunto, non tiene conto della possibilità che qualcosa vari: ad esempio, in un cambio di versione di Gambas possono modificare l'output di un comando per cui ad un certo punto nel DB cominciano a comparire dati di uno stesso tipo ma salvati in formato differente. Questo non è un caso paradossale dato che già nel recente passato in Gambas si è avuto il cambio del formato del comando Format().

Però, visto che l'applicazione è usata solo su un paio di PC, che non subisce aggiornamenti né nel suo codice né nella versione dell'interprete Gambas che la esegue (questo per motivi di stabilità, soprattutto), non sono stato certo a perdere molto tempo nel capire come i dati fossero salvati. Ottenuto il risultato voluto ho congelato ogni cosa ad una versione stabile e funzionante. Anzi, proprio per evitare "interferenze" da parte del motore DB, ho ristretto alla fine (ho appena controllato ;-)) i tipi di dati a 3 soli: bool, text e date. Memorizzando anche i numeri in formato text, ho risolto la conversione di tipo così che posso salvare gli importi delle fatture in formato già... formattato in valuta italiana (parte intera, virgola separatrice, 2 decimali).

Insomma, certamente un comportamento da programmatore poco serio, stavolta :-P
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: SQLite o non SQLite?
« Risposta #11 il: 07 Maggio 2009, 13:04:29 »
:-)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: SQLite o non SQLite?
« Risposta #12 il: 07 Maggio 2009, 13:26:45 »
Leo Leo Leo.....mi sorprendo di te...allora no lamentatevi quando faccio strafalcioni nel codice che poi funzionano.....:-P

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: SQLite o non SQLite?
« Risposta #13 il: 07 Maggio 2009, 19:39:56 »
Lo strafalcione io non lo faccio, mica sono come te :-P
Se guardi i miei codici sono tutti indentati per benino e commentati a modo, mica come le tue liste della spesa con i MovieBox mal settati :-P

Ciao :ciao:
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: SQLite o non SQLite?
« Risposta #14 il: 08 Maggio 2009, 00:51:10 »
E io manco mi pronuncio... :-P