La mia applicazione Android utilizzerà file grandi e molto grandi (ad esempio tra la dimensione di 10 MB e 2 GB).Prestazioni di lettura di file su smartphone: memoria interna contro scheda SD e disco rigido del PC
Mi sono sempre chiesto quale hardware sia utilizzato dagli smartphone per la memorizzazione stabile e se le considerazioni sul software (lettura/ricerca di file) siano simili qui per gli hard disk del PC. Ho cercato di trovare informazioni sull'hardware e di avere una sorta di immagine (memoria interna, scheda SD), ma nessuna delle fonti che ho controllato è completa e/o abbastanza specifica. I miei (interrelati) domande sono:
- Quali sono le principali differenze che devo prendere in considerazione quando la lettura di file di grandi dimensioni su uno smartphone "moderna" (ad esempio, su un telefono Android 2.2.), Rispetto a fare la stessa cosa con un'applicazione Java per PC? (in termini di prestazioni di ricerca/lettura del disco, ovviamente, la RAM del cellulare è più piccola di un PC, quindi deve essere presa in considerazione in caso di buffer, ecc.)
- Quali sono le principali differenze (rilevanti) tra lo storage stabile hardware utilizzato negli smartphone rispetto ai dischi rigidi del PC? (So che questa è una domanda molto ampia, quindi apprezzo anche una risposta molto breve qui e possibilmente alcuni URL esterni affidabili)
- In termini di
InputStream
lettura e ricerca (skipBytes), c'è una differenza (ad esempio su Android) tra l'utilizzo della memoria interna e della scheda SD (non ho intenzionalmente scritto "memoria esterna", perché non è necessariamente la scheda SD su ogni dispositivo)? La scheda SD è più lenta? - Ad esempio, vorrei leggere 2 MB di dati da un file da 2 GB e questi dati da 2 MB sono distribuiti in molte parti diverse/distanti del file. Tutti gli offset sono noti, quindi creo un ordine crescente di offset e quindi utilizzo
BufferedInputStream.read()
(ad esempio in unDataInputStream
) per leggerli (e utilizzareskipBytes()
per cercare dove necessario). Pertanto, nel file system sottostante, potrebbe essere necessario "passare attraverso" l'intero file da 2 GB. (Ad esempio, Android utilizza le funzioni di linux per cercare nel file quando necessario.) Tuttavia, è efficiente quanto nell'hard disk del PC? Che dire della scheda SD rispetto all'archiviazione interna in termini di efficienza di ricerca? - Quali sono le velocità di lettura dei dati tipici? (memoria interna dello smartphone contro scheda SD e disco rigido non SSD del PC)
So che il benchmarking per la mia applicazione concreta è un must, ma gradirei anche un chiarimento teorico in merito.
IMPORTANTE: "... è alla ricerca efficiente come in un disco rigido del PC" quando chiedo che, io non (solo) media dei valori assoluti, ma anche il meccanismo di esso. Cioè, se funziona sulla base degli stessi principi logici (= saltare le parti grandi quando è possibile), o ci sono alcuni inconvenienti (ad es. Tale ricerca "saltata" non è possibile su una scheda SD, e quindi saltare è molto di più - - ovvero non proporzionalmente - inutile su un hardware dello smartphone che su un disco rigido del PC).
'Quali sono le velocità di lettura dei dati tipici?' Varia su ogni sistema/dispositivo poiché è vincolante con il processore e le serie di chip. In tal caso, uno smartphone moderno potrebbe essere più veloce di un computer con processore celeron, allo stesso modo – Lucifer
Per quanto riguarda la dichiarazione "La ricerca è sempre un compito lento" nella risposta di Klaus Villaca, non sono d'accordo. Non è generalmente vero; per esempio. in base a ciò che ho sentito, su una scheda SD, potrebbe anche essere ** più veloce ** rispetto a un disco rigido (a causa della natura dell'hardware della scheda SD). Cioè scegliere una posizione casuale potrebbe essere più veloce rispetto a un disco rigido del PC. –