PDA

Visualizza Versione Completa : Distribuire un Database di 25MB



dhez
05-07-11, 10:50
Ma che bello questo è il primo thread aperto su questo forum :D
Salve a tutti, devappisti!
Sto siluppando un'app un po' particolare. Niente di strano, ma la particolarità è che devo trascinarmi dietro in qualunque modo un database di 25MB, eh si :p (sicuramente verrà compresso, ovvio)
Il file che ho in mano in realtà è l'insieme di query per creare la struttura e i dati al suo interno, il dump per capirci meglio.
Le domande da farvi sono due sostanzialmente:
1 - Qual'è il modo migliore per importare il database sul terminale, inzupparlo nell .apk o farlo scaricare dopo il download dell'app su un server a parte (o altre soluzioni eventualmente)? (Penso di sapere già la risposta :p)
2 - La domanda più importante. Il dump che ho in mano è di mysql. Il dump che crea non rispetta lo standard ansi anche argomentando mysqldump con --compatible=ansi, e di conseguenza non è compatibile con sqlite che supporta solo SQL standard. :/ Non so come fare, ho provato mille tool, inoltre non posso nemmeno sistemare a mano perché si tratta di un file "infinito" e ci passerei un mese solo per finire di leggerlo. Esiste quindi un modo per esportare un database mysql in modo da renderlo compatibile con sqlite?

Vi ringrazio in anticipo!
Ciao, Daniel :)

fabioCollini
05-07-11, 15:25
Ciao, provo a rispondere alle domande:

solitamente su Android si crea il db e poi si esegue uno script di caricamento dati. Sinceramente non mi sono mai posto il problema di come distribuire già il db pieno di dati. Nel tuo caso se i dati sono tanti ti conviene scaricarli da internet ma ovviamente è un po' più complesso.
per questo ti serve un esperto di db o un esperto di ultra edit (o qualche editor di testo simile). Il column mode per editare i file per colonne a volte fa miracoli!

Spero di esserti stato utile!
Ciao, Fabio


Ma che bello questo è il primo thread aperto su questo forum :D
Salve a tutti, devappisti!
Sto siluppando un'app un po' particolare. Niente di strano, ma la particolarità è che devo trascinarmi dietro in qualunque modo un database di 25MB, eh si :p (sicuramente verrà compresso, ovvio)
Il file che ho in mano in realtà è l'insieme di query per creare la struttura e i dati al suo interno, il dump per capirci meglio.
Le domande da farvi sono due sostanzialmente:
1 - Qual'è il modo migliore per importare il database sul terminale, inzupparlo nell .apk o farlo scaricare dopo il download dell'app su un server a parte (o altre soluzioni eventualmente)? (Penso di sapere già la risposta :p)
2 - La domanda più importante. Il dump che ho in mano è di mysql. Il dump che crea non rispetta lo standard ansi anche argomentando mysqldump con --compatible=ansi, e di conseguenza non è compatibile con sqlite che supporta solo SQL standard. :/ Non so come fare, ho provato mille tool, inoltre non posso nemmeno sistemare a mano perché si tratta di un file "infinito" e ci passerei un mese solo per finire di leggerlo. Esiste quindi un modo per esportare un database mysql in modo da renderlo compatibile con sqlite?

Vi ringrazio in anticipo!
Ciao, Daniel :)

dhez
05-07-11, 15:39
Ciao, provo a rispondere alle domande:

solitamente su Android si crea il db e poi si esegue uno script di caricamento dati. Sinceramente non mi sono mai posto il problema di come distribuire già il db pieno di dati. Nel tuo caso se i dati sono tanti ti conviene scaricarli da internet ma ovviamente è un po' più complesso.
per questo ti serve un esperto di db o un esperto di ultra edit (o qualche editor di testo simile). Il column mode per editare i file per colonne a volte fa miracoli!

Spero di esserti stato utile!
Ciao, Fabio

Grazie per la risposta. Ho provveduto giocando un po' di bashscript.
Per quanto riguarda il punto uno, sì, ho già usato i database, ma appunto questa volta la storia è molto più diversa del solito. Ho visto che il dump zippato non supera i 4 mega e forse potrei farci un pensierino inglobandolo nell'app. Ma ho ancora dubbi. Con la seconda opzione dovrei caricare il file su un server esterno e questo implicherebbe anche dei costi di gestione. Il download deve essere veloce e affidabile. Se trovo qualche server ftp gratuito e affidabile allora si può fare.
Che ne dite?

andreaCappellotto
05-07-11, 20:27
Ciao ragazzi..:) premetto che di android non so na mazza..:) però le mie esperienze in "scaricamento dati" mi hanno insegnato che un utente si incazza se deve scaricare piu di 600K.... questo perchè scaricando 600K ci si impiega 1sec in 3g ma 30 in edge/gprs ecc.... quindi pensare di scaricare (ipotiziamo al primo avvio) anche 4 mb di file diventa pesante...
Naturalemente dipende dal target della tua app... se è un gioco ti dico assolutamente di NO, se è un app specifica per qualche lavoro magari ci puo stare avvisando l'utente prima....
magari una soluzione potrebbe essere quella di interrogare un webservice quando serve e questo ritorna Json o xml di volta in volta... secondo me se non puoi integrare direttamente il db nell'app questa è la soluzione migilore.. (a parer mio)
;)

dhez
05-07-11, 20:55
Ciao ragazzi..:) premetto che di android non so na mazza..:) però le mie esperienze in "scaricamento dati" mi hanno insegnato che un utente si incazza se deve scaricare piu di 600K.... questo perchè scaricando 600K ci si impiega 1sec in 3g ma 30 in edge/gprs ecc.... quindi pensare di scaricare (ipotiziamo al primo avvio) anche 4 mb di file diventa pesante...
Naturalemente dipende dal target della tua app... se è un gioco ti dico assolutamente di NO, se è un app specifica per qualche lavoro magari ci puo stare avvisando l'utente prima....
magari una soluzione potrebbe essere quella di interrogare un webservice quando serve e questo ritorna Json o xml di volta in volta... secondo me se non puoi integrare direttamente il db nell'app questa è la soluzione migilore.. (a parer mio)
;)
Ciao andrea. Innanzi tutto grazie per la risposta.
L'app in questione è dedicata proprio alla visualizzazione dei dati del database. Quindi la fa da padrone in questo caso.
Vi espongo il vero problema di per se. Essendo l'app per un target di nicchia, di gente che in poche parole la usa spesso, puntavo al rendere quest'applicazione il più utile ed efficiente possibile in termini di usabilità. Il database potrei benissimo lasciarlo on-line e fornire i dati solo agli utenti connessi alla rete; questo però comporta due problemi:

L'utente è costretto ad essere connesso per visualizzare questi dati, e in assenza di connessione l'app diventerebbe inutilizzabile
Il server riceverà un gran numero di query, troppo elevate per un servizio web gratuito, e dovrei quindi passare ad un server a pagamento ed i costi aumenterebbero.

Dall'altro canto i problemi sarebbero minori ma non irrilevanti, ovvero essenzialmente quello di avere 29 megabyte sulla sd durante l'utilizzo (25mb scompattato + 4 mb compattato) e 4 mb con l'app chiusa. Lo spazio occupato è comunque sconcertante.

Voi avreste in mente qualcosa di più logico e sensato per fornire un servizio offline? O magari promiscuo?

andreaCappellotto
05-07-11, 21:00
capisco... ed era come immaginavo.... diciamo che non lo vedo poi così sconcertante avere un app da 30 mb a runtime... insomma anche se è Android parliamo sempre di device con almeno qualche gb di storage di base, giusto? quindi quando l'app parte scompatti il db e lo utilizzi, quando termina lo cancelli... secondo me in offline è la soluzione migliore....

dhez
05-07-11, 21:05
Sì, ho pensato ad altri modi ma sarebbero troppo confusionari e non mi va di complicarmi la vita per un lavoro semplice. Alla fine questa mi sembra la soluzione migliore.
Se l'app poi è ben fatta non penso che gli utenti si scoccino più di tanto, soprattutto per il lavoro che deve svolgere. Potrei anche fare in tutti e due i modi in futuro chissà.. Vedremo!

Grazie a tutti per i chiarimenti e per i consigli.

Daniel :)

fabioCollini
06-07-11, 09:10
Ciao, il problema dello spazio su disco è il meno, l'importante è che sia spazio su sd e non su memoria interna.
Per i mega da scaricare anche se li metti dentro l'app l'utente li deve comunque scaricare la prima volta (e a ogni aggiornamento!) dal market.
Per queste cose ti consiglio di guardarti Google App Engine, si integra benissimo con Android, guardati il talk di Google I/O di quest'anno e qualche idea ti viene di sicuro.
Ciao, Fabio

dhez
06-07-11, 11:05
Questo è il punto, non voglio creare una versione nuova dell'app ad ogni aggiornamento del database. Quindi penso che lo farò separato il download. Darò senz'altro un'occhiata all'App Engine e grazie per il consiglio, davvero.

Daniel