View Full Version : Database Web e Mobile
Ciao a tutti.
Avrei bisogno di un vostro consiglio riguardo l'adozione del database giusto.
Devo sviluppare un sito web sul quale utilizzerò, come database, SQL.
In futuro, questo database dovrà essere accessibile anche dalle relative app mobile (Android e iOS), saranno sviluppate in un secondo momento e non in parallelo con il sito.
Quello che però voglio fare già da ora è costruire un database che poi sarà facilmente utilizzabile anche sulle app, senza dover incasinare il mondo con conversioni e sincronizzazioni quando sarà il momento.
Posso utilizzare quindi il SQL? O avrò problemi con le app poi? Potrò utilizzarlo in maniera diretta o dovrò comunque per forza convertirlo? Insomma ogni consiglio sull'argomento è ben accetto.
<Gabrik>
28-08-2014, 12:18
Di solito si evita di collegarsi direttamente ad un server db (MySQL , MSSQL e via dicendo) direttamente da un app Android o iOS, in questi casi di solito si realizza un Web Service (in qualsiasi linguaggio PHP,Java ecc...) e poi si effettuano delle semplici richieste http per prendere/inserire dati.
Questo viene fatto per eventuali problemi di sicurezza (connessioni che restano aperte)
Così tutta la gestione del db(connessione,query,disconnessione) viene gestita dal web service e l'app deve solo fare chiamate http
Questo impedirebbe però all'app di funzionare offline.
Mentre io vorrei questo tipo di funzionamento.
Il sito permette di scegliere i propri colori preferiti.
Mi loggo, inserisco i colori ed esco.
Apro l'app con una connessione web, mi loggo e mi ritrovo gli stessi colori.
Chiudo l'app.
Apro l'app senza connessione web, e la lista dei miei colori preferiti è sempre lì.
In pratica la connessione vorrei che servisse solo per sincronizzare il sito e l'app.
<Gabrik>
28-08-2014, 15:42
Puoi salvare i dati che leggi dal db sul web in un db nello smartphone
Android utilizza SQLite come db interno per le app, iOS non saprei, ma penso si basi anch'esso su SQLite
In pratica ti basta sincronizzare il db sul web con quello dell'app ogni qualvolta c'è un cambiamento.
Tipo
Apro l'app
visualizzo i dati dal db interno
se la connessione è disponibile
sincronizzo il db interno e quello sul web
Perfetto!
Questo fondamentalmente volevo sapere, avevo paura di poter incappare in qualche incompatibilità.
Ma se mi basta dare ai due database la stessa struttura allora non ci son problemi.
tomminno
29-08-2014, 16:57
Perfetto!
Questo fondamentalmente volevo sapere, avevo paura di poter incappare in qualche incompatibilità.
Ma se mi basta dare ai due database la stessa struttura allora non ci son problemi.
Ovviamente dovrai poi preoccuparti di tenerli correttamente allineati. Perchè se lato web cambi i colori e l'app accede offline al db locale, non vedrebbe le ultime modifiche.
Se consenti alle app di modificare a loro volta il db offline dovrai prevedere un meccanismo di sicronizzazione bidirezionale in cui anche le app potrebbero dover aggiornare il db centrale e infine dovresti gestire i casi di potenziali conflitti nelle modifiche ;)
Rischi di entrare nell'incubo in cui hai dati duplicati da dover tenere allineati.
Secondo me pensare una App di questo tipo offline non ha molto senso.
Per la priorità d'aggiornamento avevo pensato semplicemente di usare la data e prendere i record più recenti. Sbaglio?
A me piacerebbe farla funzionare solo online, ma purtroppo non è una cosa fattibile, soprattutto nel nostro Paese, dove la copertura 3G sparisce come un coniglio nel cappello non appena esci da un centro urbano.
tomminno
01-09-2014, 08:36
Per la priorità d'aggiornamento avevo pensato semplicemente di usare la data e prendere i record più recenti. Sbaglio?
A me piacerebbe farla funzionare solo online, ma purtroppo non è una cosa fattibile, soprattutto nel nostro Paese, dove la copertura 3G sparisce come un coniglio nel cappello non appena esci da un centro urbano.
Ci possono sempre essere modifiche in conflitto: es la modifica allo stesso record se non alla stessa colonna, quali dati consideri validi?
Ci possono sempre essere modifiche in conflitto: es la modifica allo stesso record se non alla stessa colonna, quali dati consideri validi?
Quello più recente.
So che non è il massimo, ma l'applicazione un database offline deve averlo, altrimenti è inutile.
Faccio un esempio (sto usando i colori giusto per, ovviamente sarebbero record ben più complessi), sono senza linea, mi ricordo di dover cambiare il colore e passarlo da blu a rosso, lo faccio nell'app e poi, appena prende una connessione aggiorna il database.
Anche se in realtà, potrebbero verificarsi problemi pure qui. Perchè io modifico offline, si spegne il telefono, torno a casa e la modifica non è stata sincronizzata sul web.
Mi rendo conto che mi vado a complicare la vita, però una soluzione la si deve trovare.
birmarco
14-09-2014, 15:20
Io non vedo grandi problemi :D
Anche avendo l'app online potrebbero verificarsi problemi di sincronizzazione. Se due utenti dovessero leggere e aggiornare un record quasi nello stesso momento. Il primo leggerebbe il dato e lo modificherebbe nella transazione successiva. Tutto ok. Il secondo potrebbe star leggendo il dato pochi istanti prima dell'aggiornamento del primo utente. Non saprebbe dell'aggiornamento e opererebbe la modifica basandosi su un valore obsoleto.
Con un'app offline semplicemente aumenti il tempo della corsa critica. Potrebbe essere accettabile oppure no, dipende da quello che deve fare la tua app.
Se sei sicuro che ogni utente abbia i propri record, allora per l'offline non ci sarebbe alcun problema, in caso contrario non puoi procedere o devi usare strade più complesse.
Nel primo caso ti basta confrontare il timestamp del dato MODIFICATO locale con quello del last update del DB. Sarebbe semplicissimo.
Nel secondo caso ti serve un meccanismo di validazione. Ad esempio puoi confrontare il timestamp del recupero del dato da parte dell'app e poi, quando l'app torna online e si sincronizza, controllare che il last update del dato originale locale sia uguale a quello del dato online. In caso affermativo aggiorni, in caso negativo annulli in quanto il dato locale su cui hai lavorato in app non era quello ultimo presente sul database. Potresti anche non annullare ma riscaricare il dato nuovo e ripetere l'elaborazione lato app e poi ricaricare nuovamente.
Insomma, dipende solo dal tuo scenario, sicuramente non è una cosa impossibile
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.