2013-02-18 2 views
16

Quelles sont les solutions disponibles pour les banques de données côté client interrogeables? Cela servirait de cache temporaire pour effectuer des opérations de base comme le tri et l'agrégation sur des plages de dates sélectionnées par l'utilisateur dans le clientStockage côté client interrogeable

J'ai trouvé quelques candidats prometteurs, mais je ne suis pas sûr quelles sont les meilleures options

Il y a aussi d'autres options moins optimales:

  • HTML5 localStorage/sessionStorage (besoin de construire une couche de requête sur le dessus de ce ... comme lawnchair ou localstoragedb)
  • IndexedDB (compatibilité du navigateur)
  • Google Gears (interrompu)
  • websql (spécification arrêté)

Je serais curieux de connaître vos expériences avec ces options/s'il en existe d'autres que j'ai manqué

+2

Vous savez, ces bibliothèques ne sont que des emballages autour ce que vous considérez comme des solutions "moins optimales". Vous avez juste besoin de choisir le meilleur emballage qui vous convient. – adrian

+0

Je me rends compte que - c'est pourquoi je pose des questions sur les expériences des gens avec ces projets, dans l'espoir de ne pas réinventer la roue (ou peut-être de manquer quelque chose que je n'ai pas trouvé complètement) – user1424744

+3

pourquoi cette question est-elle fermée? ? C'est super utile – KJW

Répondre

0

Je l'ai utilisé pour lawnchair une petite échelle couple outils internes où je travaille et l'expérience a été très positive dans l'ensemble.

Quelque chose que j'ai appris dans le processus: JSON-js cycle.js de Douglas Crockford a résolu mes problèmes de stringify en faisant enregistrer/obtenir sur les objets à double liaison.

Quelqu'un a signalé un problème sur le repaire github lawnchair décrivant le même problème et m'a sauvé beaucoup de maux de tête. https://github.com/brianleroux/lawnchair/issues/105

+1

La façon dont il interroge est qu'il réitère sur la table de hachage ... ce n'est pas utile pour DB> 10K lignes – delphi

+0

Un bon point, Merci pour les commentaires. Bien que la question originale mentionne le tri et l'agrégation des plages de dates sélectionnées par l'utilisateur. Je ne peux pas penser à un scénario où ce type d'utilisation tomberait dans le seuil de 10K. –

1

Avez-vous essayer ma bibliothèque open source https://bitbucket.org/ytkyaw/ydn-db/wiki/Home. Il supporte IndexedDB, WebSQL et localStorage. La requête est un style NoSQL, c'est-à-dire une requête de plage de clés d'index. La requête d'index multiple nécessite l'utilisation d'un index composite ou d'un algorithme de jointure de clé. Actuellement, il existe une interface de requête de base à SQL, qui sera meilleure au fil du temps.

L'application Web à grande échelle, la plupart d'entre eux sont CRM, utilisent la bibliothèque en production.

+0

Cela semble très intéressant! Comment gère-t-il l'interrogation de plage de clés et SQL lorsqu'il utilise localStorage au lieu de IndexedDB? – user1424744

+0

La requête de plage de clés localStorage utilise l'arborescence AVL sur la mémoire. il est implémenté depuis la version 0.4.9. SQL pour localStorage n'est pas encore implémenté. –

1

J'ai écrit deux API simples pour gérer l'API de stockage. L'un d'eux est un wrapper pour le rendre facile de travailler à la fois le stockage local et session: https://github.com/chambs/minidb/

Quelque chose comme:

minidb.local.set('name', 'Willian');

minidb.local.get('name'); //gives you "Willian"

minidb.session.set('userData', {id:333, name: 'Joseph'});

minidb.session.get('userData'); //gives that object

L'autre est un espace de noms basé sur l'API localStorage uniquement (pas de session). Basiquement vous pouvez ajouter « lignes » regroupés en espaces de noms, de sorte que vous pouvez séparer les données en fonction de ces espaces de noms: https://github.com/chambs/zonjs

Quelque chose comme:

zon('user').insert({name: 'Willian', email: '[email protected]'});

zon('user').del('8739874397494');

Où « user » est l'espace de noms que vous avez défini. Il est possible d'avoir autant de namespaces que vous le souhaitez pour la même origine/domaine

Hope it helps :)