Domanda Sviluppo di una soluzione di archiviazione offline HTML5 per iOS / Android nel 2011


Il problema:

Ho bisogno di una soluzione indipendente dal dispositivo (ad esempio HTML5) per archiviare e interrogare oltre 250.000 righe di dati offline su un dispositivo di tipo phone o tablet (ad esempio iOS / Android). L'idea è che ho persone che lavorano in aree remote senza alcuna connessione dati cellulare e hanno bisogno di eseguire query su questi dati e modificarli offline. In parte sarà basato sulla geo-localizzazione, quindi se ci sono attività nell'area in cui si trovano (usa il GPS), mostrerà quelle risorse e le lascerà modificare. Quando tornano in ufficio possono sincronizzare i dati sul server dell'ufficio.

Il motivo per cui mi sto avvicinando a questo da un punto di vista standard del web è fondamentalmente quello di risparmiare tempo e denaro scrivendolo una volta in HTML5 e poi funziona su più piattaforme piuttosto che scriverlo due volte in Objective C e Java. Inoltre, se scrivi qualcosa che è indipendente dalla piattaforma, allora non sei bloccato e non scendere con la nave quando tutti si spostano su uno più nuovo. Avevamo un'app simile scritta per Windows Mobile 5, ora è inutile in quanto quella piattaforma è morta.

Il database offline sul dispositivo deve essere:

  • veloce (risposte inferiori a 2 secondi)
  • potenzialmente eseguire join e avere relazioni con altre tabelle in grado di interrogare il database
  • selezionare i dati entro un certo intervallo o criteri, ad es. per coordinate x e y in base alla lettura GPS.

Opzioni:

Memoria locale HTML5:


74
2017-10-12 01:38


origine


risposte:


Consiglierei di controllare il JayData libreria, che in realtà ha lo scopo preciso di creare un livello di accesso ai dati agnostico di archiviazione per dispositivi mobili. JayData fornisce un livello di astrazione con JavaScript Language Query (JSLQ) e JavaScript CRUD supportano e lavoriamo allo stesso modo con diversi tipi di archivio dati offline e online. JayData supporta la gestione di entità complesse e anche relazioni di entità localmente o da remoto.

Al momento della scrittura, JayData supporta i seguenti negozi o protocolli: webSQL (sqLite) / IndexedDB / OData / YQL / FBQL.

Il tuo problema specifico con diversi sistemi che forniscono diversi motori di archiviazione può essere facilmente risolto con la funzione di fallback del provider di JayData: utilizzerà qualsiasi livello di storage che può trovare pur fornendo la stessa API verso il codice del consumatore.

Con riguardo al fatto che WebSQL sia deprecato entro il 2012: al momento della stesura di questo è WebSQL che ha ancora una copertura del 95% del dispositivo, tra cui Samsung SmartTV e Amazon Kindle. Scopri kindle eseguendo test di unità WebSQL con JayData.


17
2018-05-18 10:42



Vorrei provare CouchBase Lite. È un'implementazione quasi completa di CouchDB che funziona su Android e iOS.

iOS

androide

Se hai avvolto la tua app in qualcosa di simile PhoneGap è possibile creare app native HTML 5 per entrambe le piattaforme e per implementare CouchDB è sufficiente eseguire solo una piccola parte della programmazione specifica per Android / iOS.

Professionisti:

  • Motore di visualizzazione rapida per l'esecuzione di query su più righe di dati.
  • Supporto per la replica semplice e potente della sporcizia.

Contro:

  • Key-Value Store: ci vorrà un po 'di tempo per abituarsi.

13
2017-10-15 07:56



Ho fatto qualche ricerca in più mentre cercavo una soluzione per il mio progetto. Sembra che questa libreria sia piuttosto promettente: http://nparashuram.com/IndexedDBShim/

Permette di utilizzare l'API IndexedDB con WebSQL dietro le quinte.

I test passano sui recenti iPad, iPhone 5, Android 4.2.2.

Spero che questo aiuti qualcuno.


6
2018-06-06 17:53



Ti direi di usare Corona per questo . È una piattaforma privata utilizzata per applicazioni cross-mobile che supporta SQLite.

Professionisti

  • È semplice e ha un grande supporto per SQLite e non ha bisogno di fare cose strane con l'archiviazione HTML5

Contro

  • devi pagare per questo se vuoi utilizzarlo nell'Android Market o nel mercato iOS.

Incollo qui ciò che dicono al riguardo:

Corona include il supporto per i database SQLite su tutte le piattaforme. Questo è   basato sul supporto sqlite integrato su iPhone e compilato   versione di SQLite su Android. Si noti che questo aumenta la dimensione del   Binario Android da 300K.

SQLite è disponibile in tutte le versioni di Android, iPhone e iPad, come   così come nel Corona Simulator ...


2
2017-10-15 15:50



"Ho visto cose come la sedia a sdraio, ma sono abbastanza sicuro che ti consente di utilizzare solo la memoria locale per impostazione predefinita e ricade agli altri. Penso che preferirei usare Web SQL (di default) quindi le opzioni più lente ".

Questo è configurabile, ciascuno degli 'adattatori' per i motori di archiviazione è autonomo, è possibile passare un adattatore al costruttore Lawnchair o, in alternativa, modificare l'ordine in cui ricade su altre opzioni di archiviazione concatenando i file javascript in modo diverso quando creando la libreria. per esempio. per indicizzati-db, quindi tornare a sqlite e quindi a ingranaggi sqlite:

git clone https://github.com/brianleroux/lawnchair.git  
cd lawnchair  
cat src/Lawnchair.js src/adapters/indexed-db.js src/adapters/webkit-sqlite.js src/adapters/gears-sqlite.js > my_lawnchair.js

Naturalmente, come suggeriscono le altre risposte, puoi avvolgere il tuo html5 in un'app nativa usando phonegap ecc. Allora avrai un sacco di opzioni, ma se vuoi rispettare gli standard web, questo potrebbe essere un buon modo per andare fino a abbiamo un'ampia adozione di IndexedDB.


2
2018-02-03 14:17



Perché non scrivere un semplice motore di archiviazione in javascript (che copre la parte "basata sugli standard")? A quanto pare non hai bisogno di niente di molto elegante, quindi non dovrebbe richiedere troppo sforzo per farlo funzionare.

Vorrei fare quanto segue:

  • Memorizza tutto in bson o in un formato binario simile.
  • Analizza e crea indici nei file e leggi all'avvio.
  • Query usando javascript e leggi dal grande file dalla tua applicazione web (offline ovviamente).
  • Archivia gli oggetti aggiornati separatamente.

Questa soluzione è fattibile solo se il database è abbastanza semplice. Ma penso che potrebbe funzionare - il supporto di javascript è buono sui dispositivi mobili.

Per ispirazione Qui è un'implementazione Btree + in javascript.

Per leggere i file locali è necessario il file API, che può essere usato per accedere ai file locali. È supportato anche nella maggior parte dei browser moderni Safari 6. Non sono stato in grado di determinare se gli attuali browser iPhone supportano questa API.


1
2017-10-15 15:36



Vale la pena di controllare la mia libreria open source https://bitbucket.org/ytkyaw/ydn-db/wiki/Home

Modulo di database Javascript per meccanismi di archiviazione Indexeddb, WebDatabase (WebSQL) e WebStorage (localStorage) che supportano la migrazione della versione, la query avanzata e la transazione.

Essendo libreria NoSQL, join è manuale, ma non impossibile. Esistono già degli algoritmi di unione chiave che incorporano la libreria.


1
2018-05-30 15:14