Modo migliore per memorizzare le immagini per la sincronizzazione mobile

1

Lo scenario è che ho un Web Dashboard (sviluppato usando PHP + MySQL) e ho App per Android e iOS che sincronizzano i dati da Web Dashboard (solo un modo, ad esempio Dashboard per app mobili)

Ora il problema è che su poche schermate in App ho bisogno di mostrare le immagini che verranno catturate in Web Dashboard tramite upload di file.

In primo luogo, ho progettato le tabelle in modo tale da memorizzare i percorsi dell'immagine. Ma in questo modo entrambe le App devono eseguire un servizio in background di qualcosa per recuperare le immagini da quelle URL una volta che ottengono i dati della tabella in formato JSON.

In seguito, ho modificato DB Design per archiviare Image BLOB, che ha reso questo lavoro più semplice, ma durante la sincronizzazione, se ho circa 100 righe con Image BLOB, ci vuole molto tempo per la sincronizzazione. Il numero di file aumenterà ulteriormente.

E per la prima volta, quando sono installate le App dovrei Sincronizzare tutti i dati in una volta, quindi solo i dati transazionali incrementati dell'intervallo.

Quindi il problema principale è con First time data.

Qualche suggerimento su come posso fornire una soluzione migliore?

    
posta Krishnandu Sarkar 14.02.2015 - 08:34
fonte

2 risposte

3

Dimensioni del file

Hai bisogno di gestire la vasta gamma di problemi che derivano dalla dimensione delle immagini - sia compresse che non, le immagini vanno da centinaia di KB e fino a un massimo di dieci volte superiore alla tipica quantità di dati tua handle di frontend / backend per operazione.

Pertanto, la prima strategia consiste nel concentrarsi sulla riduzione della dimensione dell'immagine. Non preoccuparti di tecniche che migliorano solo poche percentuali: per migliorare le cose, è necessaria una compressione di un ordine di grandezza migliore.

Il miglior approccio per ridurre le dimensioni del file è ridimensionare l'immagine, il più possibile senza far arrabbiare gli utenti.

Se utilizzi JPEG o WebP (o altri formati con perdita di dati), puoi provare a utilizzare un livello di qualità diverso. A volte il miglior compromesso si ottiene da una combinazione di ridimensionamento e regolazione del livello di qualità. Non limitare i fattori di ridimensionamento alle potenze di due.

Il secondo migliore approccio di compressione dell'immagine dipende dal tipo di contenuto dell'immagine. Avrai bisogno di conoscere le basi dei formati di immagine compressi e di essere creativo applicando queste basi.

Con un approccio molto semplice, ampie aree di colore uniforme vengono semplicemente tagliate fuori dall'immagine e sostituite con un colore di sfondo, che deve essere dipinto dall'app, utilizzando lo stesso esagono RGB.

Sul controllo delle versioni

Il database di back-end deve essere in grado di fornire un checksum, una data / ora (ultima ora modificata) o un numero di versione del file che serve ad informare l'app se hanno il file più aggiornato.

Nel mantenere l'utente dalla noia

Potrebbe essere necessario mostrare miniature piccole e veloci da scaricare (che sono versioni ridimensionate dell'immagine) nel caso in cui gli utenti della tua app siano rapidi. Assicurati che queste miniature siano correttamente memorizzate nella cache dal back-end - caricando le anteprime dal disco aggiunto alla latenza, che sconfigge lo scopo.

Elaborazione delle immagini di backend

Sembra che il consiglio prevalente su Programmers.StackExchange sia quello di mantenere una coda di operazioni di elaborazione delle immagini da eseguire; la coda che deve essere eseguita da un processo di lavoro di ImageMagick out-of-process; i risultati vengono aggiunti ad un'altra "coda finita" che deve essere gestita dal back-end.

    
risposta data 28.02.2015 - 23:14
fonte
-2

Vorrei sincronizzare gli URL solo con le immagini memorizzate sul server, non con l'immagine completa come BLOB. Quindi la sincronizzazione è veloce e le immagini devono essere caricate 'in tempo' quando vengono utilizzate / visualizzate.

Modifica: ho visto che la tua prima soluzione era qualcosa del genere. Mi dispiace, non ho notizie per te, ma penso ancora che il caricamento delle immagini pigro dovrebbe risolvere il problema ...

    
risposta data 28.02.2015 - 22:31
fonte

Leggi altre domande sui tag