Le problème:
J'ai besoin d'un agnostique appareil (par exemple, HTML5) solution pour le stockage et l'interrogation de plus de 250 000 lignes de données en mode hors connexion sur un téléphone ou une tablette type de périphérique (iOS/Android). L'idée étant, j'ai des gens qui travaillent dans des régions éloignées, sans aucune connexion de données cellulaires, et ils ont besoin pour exécuter des requêtes sur ces données et de les modifier en mode hors connexion. En partie, il sera de la géo-localisation, de sorte s'il existe des biens dans la région, ils sont en (utilise le GPS), alors il sera de montrer à ces actifs et de leur permettre d'être édité. Une fois de retour au bureau, ils peuvent synchroniser les données en arrière à l'office de serveur.
La raison que j'aborde ce à partir d'un standard du web point de vue est essentiellement à économiser temps et argent en écrivant une fois en HTML5 et puis, il fonctionne à travers de multiples plates-formes plutôt que de l'écrire deux fois en Objective C et Java. Aussi, si vous écrivez quelque chose qui est plate-forme agnostique, alors vous n'êtes pas enfermés et ne pas couler avec le navire quand tout le monde se déplace à un autre plus récent. Nous avons eu la même application écrite pour Windows Mobile 5, maintenant, il est inutile que cette plate-forme est mort.
Le mode hors connexion de la base de données sur le périphérique doit être:
- rapide (réponses en moins de 2 secondes)
- potentiellement effectuer des jointures et avoir des relations avec d'autres tables de pouvoir interroger la base de données
- sélectionnez les données à l'intérieur d'une certaine plage ou de critères, par exemple en x et en y pour coordonner basé sur le GPS de la lecture.
Options:
Le stockage local HTML5:
Amende pour de petites quantités de données <5,000 clés/valeurs, vous pouvez même stocker des tableaux/objets, si vous le convertir en JSON.
Inconvénients:
- Pour plus de 10 000 lignes, même sur un haut de gamme de la machine, le navigateur va ralentir à une exploration.
- Ne peut pas faire de requêtes complexes sur les données à extraire les données que vous voulez que vous avez à parcourir l'ensemble de stockage et rechercher manuellement.
- Les limites à la quantité de stockage qui peuvent être stockées
Web Base de données SQL:
- Répond aux exigences.
- Rapide pour exécuter une requête sur de 250 000 lignes (1-2secs)
- Pouvez créer des requêtes complexes, joint etc
- Pris en charge par Safari, Android et Opera donc fonctionne sur iOS et Android
Inconvénients:
- Obsolète depuis novembre 2010
- Faille de sécurité avec la croix-répertoire des attaques. Pas vraiment un problème qu'on ne sera pas sur l'hébergement mutualisé
IndexedDB:
Clé/valeur magasin d'objets similaires pour le stockage local, sauf avec l'index.
Inconvénients:
- Lent à l'exécution d'une requête sur 200 000 lignes (15-18secs)
- Ne peut pas exécuter des requêtes complexes
- Ne peut pas faire des jointures avec d'autres tables
- Non pris en charge par téléphone principal ou les tablettes par exemple iPad/Android
- Standard ne sont pas complètes
Cela laisse à la seule option de la mise en œuvre de l'obsolète Web SQL méthode qui ne peuvent travailler que pour une autre année. IndexedDB et locaux de stockage sont inutilisable à l'heure actuelle.
Je ne suis pas sûr de savoir comment Mozilla et Microsoft a obtenu le Web, Base de données SQL standard obsolète et pourquoi le W3C laisser faire. Soi-disant entre eux, ils ont 77% de la navigateur de bureau marché. Sur les appareils mobiles avancés Mozilla et Microsoft ont presque zéro influence comme Safari, Opera et Android ont plus de 90% de part de marché. Comment Mozilla Et Microsoft peuvent dicter la norme devrait être utilisé dans le marché de la téléphonie mobile qui est l'endroit où le stockage hors ligne est plus susceptible d'être utilisé n'a pas de sens.
Dans les commentaires de Mozilla sur le pourquoi ils ont voulu aller avec IndexedDB au lieu de cela sont principalement sur "développeur de l'esthétique", et ils n'aiment pas l'idée de l'exécution de SQL dans le code JavaScript. Je ne suis pas de l'acheter.
Actuellement, la norme proposée est de qualité inférieure et un très de base NoSQL mise en œuvre est lente et ne prend même pas en charge les fonctionnalités avancées que les gens ont besoin dans une base de données. Il y a beaucoup de code réutilisable pour établir la base de données et obtenir les données, mais ils le prétendent les gens vont écrire quelques belles abstraction des bibliothèques sur le dessus de lui fournir davantage de fonctionnalités avancées. Dès Oct 2011 ils sont nulle part pour être vu.
Ils ont désapprouvé le Web existante de SQL standard qui fonctionne réellement et est mis en œuvre dans le principal mobile/tablette navigateurs. Alors que leur "nouveau" et "mieux" standard n'est pas disponible dans les principaux navigateurs mobiles.
Que sommes-nous en tant que développeurs censé utiliser pour les 3-5 prochaines années, ce qui est quand la IndexedDB spécification peut s'en cours de standardisation, d'avoir plus de fonctionnalités, mises en œuvre dans le principal mobile/tablette navigateurs et il y a quelques belles bibliothèques pour rendre les choses plus faciles?
Le W3C devrait garder le Web, Base de données SQL standard qui s'exécutent en parallèle et simplement corriger les problèmes. Il a déjà le support pour les principales plates-formes mobiles et cela fonctionne assez bien. Le fait que Mozilla et Microsoft en tant que les deux joueurs avec le plus de navigateur de bureau de l'action ont été en mesure d'obtenir ce standard mis au rebut est assez douteux, et pourrait être vu comme une tentative d'entraver les progrès sur le web mobile plates-formes jusqu'à ce qu'ils sont en mesure de rattraper et d'offrir des solutions concurrentes contre iOS/Safari et Android.
En conclusion, quelqu'un aurait-il une solution à mon problème qui va travailler pour iOS/Android pour téléphone/tablette. Peut-être une belle API wrapper qui peut utiliser plusieurs bases de données mises en œuvre dans le fond à interroger la capacité et il vous permet de choisir la base de données qui a la priorité. J'ai vu des choses comme lawnchair mais je suis assez sûr qu'il ne vous permet d'utiliser le stockage local par défaut et retombe à la pour les autres. Je crois que je préfère c'Web SQL (par défaut), puis le ralentissement des options.
Toute l'aide pour une solution beaucoup apprécié, merci!