Pregunta Desarrollar una solución de almacenamiento sin conexión HTML5 para iOS / Android en 2011


El problema:

Necesito una solución independiente del dispositivo (por ejemplo, HTML5) para almacenar y consultar más de 250,000 filas de datos sin conexión en un dispositivo de tipo teléfono o tableta (por ejemplo, iOS / Android). La idea es que tengo personas que trabajan en áreas remotas sin ninguna conexión de datos móviles y que necesitan ejecutar consultas sobre estos datos y editarlos sin conexión. En parte, se basará en la ubicación geográfica, por lo que si hay activos en el área en la que se encuentran (usa GPS), entonces mostrará esos activos y los editará. Cuando vuelven a la oficina, pueden sincronizar los datos con el servidor de la oficina.

La razón por la que me estoy acercando a esto desde el punto de vista del estándar web es básicamente ahorrar dinero y tiempo al escribirlo una vez en HTML5 y luego funciona en múltiples plataformas en lugar de escribirlo dos veces en Objective C y Java. Además, si escribes algo que es independiente de la plataforma, entonces no estás bloqueado y no te hundes con la nave cuando todos se mueven a uno más nuevo. Tuvimos una aplicación similar escrita para Windows Mobile 5, ahora es inútil ya que esa plataforma está muerta.

La base de datos fuera de línea en el dispositivo debe ser:

  • rápido (respuestas por debajo de 2 segundos)
  • potencialmente realizar uniones y tener relaciones con otras tablas capaces de consultar la base de datos
  • seleccionar datos dentro de un cierto rango o criterio, p. por x & y coordenadas basadas en la lectura de GPS.

Opciones:

Almacenamiento local HTML5:


74
2017-10-12 01:38


origen


Respuestas:


Yo recomendaría revisar el JayData biblioteca, que en realidad tiene el propósito exacto de crear una capa de acceso a datos agnóstico de almacenamiento para dispositivos móviles. JayData proporciona una capa de abstracción con JavaScript Language Query (JSLQ) y compatibilidad con CRUD de JavaScript y le permite trabajar exactamente de la misma manera con diferentes tipos de tiendas de datos en línea y fuera de línea. JayData admite el tratamiento de entidades complejas y también relaciones de entidades localmente o de forma remota.

En el momento de redactar este documento, JayData admite las siguientes tiendas o protocolos: webSQL (sqLite) / IndexedDB / OData / YQL / FBQL.

Su problema particular con los diferentes sistemas que ofrecen diferentes motores de almacenamiento puede abordarse fácilmente con la función de respaldo del proveedor de JayData: utilizará cualquier capa de almacenamiento que pueda encontrar mientras todavía proporciona la misma API para el código del consumidor.

Con respecto a que WebSQL está en desuso en 2012: en el momento de escribir esto, es WebSQL que todavía tiene una cobertura del 95% del dispositivo, incluyendo Samsung SmartTV y amazon Kindle. Eche un vistazo a la ejecución de pruebas de la unidad WebSQL con JayData.


17
2018-05-18 10:42



Me gustaría pagar por CouchBase Lite. Es una implementación casi completa de CouchDB que se ejecuta en Android e iOS.

iOS

Androide

Si envuelve su aplicación en algo así como PhoneGap podría crear aplicaciones nativas HTML 5 para ambas plataformas y solo tendría que hacer un poco de programación específica de Android / iOS para implementar CouchDB.

Pros:

  • Motor de vista rápida para consultas en muchas filas de datos.
  • Suciedad simple y potente soporte de replicación horneado.

Contras:

  • Tienda de valores clave: le tomará un tiempo acostumbrarse.

13
2017-10-15 07:56



Investigué un poco más mientras buscaba una solución para mi propio proyecto. Parece que esta biblioteca es bastante prometedora: http://nparashuram.com/IndexedDBShim/

Permite usar IndexedDB API con WebSQL detrás de escena.

Se trata de pruebas de iPad reciente, iPhone 5, Android 4.2.2.

Espero que esto ayude a alguien.


6
2018-06-06 17:53



Te diría que uses Corona para ello . Es una plataforma privada utilizada para aplicaciones móviles cruzadas que tiene soporte para SQLite.

Pros

  • Es fácil y tiene un gran soporte para SQLite, y no necesita hacer cosas extrañas con el almacenamiento Html5

Contras

  • debes pagarlo si quieres usarlo en Android Market o iOS Market.

Pego aquí lo que dicen al respecto:

Corona incluye soporte para bases de datos SQLite en todas las plataformas. Esto es   basado en el soporte sqlite incorporado en el iPhone, y un compilado   versión de SQLite en Android. Tenga en cuenta que esto aumenta el tamaño de   Binario de Android por 300K.

SQLite está disponible en todas las versiones de Android, iPhone y iPad, como   así como en el simulador Corona ...


2
2017-10-15 15:50



"He visto cosas como la silla de jardín, pero estoy bastante seguro de que solo te permite usar el almacenamiento local de manera predeterminada y volver a los demás. Creo que prefiero utilizar Web SQL (de forma predeterminada) y luego las opciones más lentas "

Esto es configurable, cada uno de los 'adaptadores' para motores de almacenamiento es autónomo, puede pasar un adaptador al constructor Lawnchair o, alternativamente, cambiar el orden en el que vuelve a caer a otras opciones de almacenamiento al concatenar los archivos javascript de forma diferente cuando creando la biblioteca. p.ej. para indexed-db luego volver a caer en sqlite luego engrana 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

Por supuesto, como sugieren las otras respuestas, puede envolver su html5 en una aplicación nativa usando phonegap, etc., entonces tendrá muchas opciones, pero si desea cumplir con los estándares web, esta puede ser una buena manera de hacerlo tenemos amplia adopción de IndexedDB.


2
2018-02-03 14:17



¿Por qué no escribir un motor de almacenamiento simple en javascript (que cubre la parte "basada en estándares")? Aparentemente no necesitas nada muy elegante, por lo que no debería requerir demasiado esfuerzo para que funcione.

Yo haría lo siguiente:

  • Almacene todo en bson o en un formato binario similar.
  • Analice y cree índices en archivos, y lea al inicio.
  • Consulta usando javascript y lee desde el gran archivo de tu aplicación web (obviamente fuera de línea).
  • Almacenar objetos actualizados por separado.

Esta solución solo es factible si la base de datos es lo suficientemente simple. Pero creo que podría funcionar: la compatibilidad con JavaScript es buena en los dispositivos móviles.

Por inspiración aquí es una implementación de Btree + en javascript.

Para leer los archivos locales, necesitará la archivo API, que se puede usar para acceder a archivos locales. Es compatible con la mayoría de los navegadores modernos, incluso Safari 6. Sin embargo, no he podido determinar si los navegadores actuales de iPhone son compatibles con esta API.


1
2017-10-15 15:36



Vale la pena revisar mi biblioteca de código abierto https://bitbucket.org/ytkyaw/ydn-db/wiki/Home

Módulo de base de datos de Javascript para Indexeddb, WebDatabase (WebSQL) y WebStorage (localStorage) mecanismos de almacenamiento compatibles con migración de versión, consulta avanzada y transacción.

Siendo la biblioteca NoSQL, join es manual, pero no imposible. Ya hay algoritmos de unión de claves incorporados en la biblioteca.


1
2018-05-30 15:14