Accès hors ligne-SQLite ou DB indexé?

je suis dans la phase de R&D pour développer une application, avec les exigences clés suivantes:

  • HTML5 application web - qui aura également une version hybride
  • les données des formulaires seront stockées localement, lorsqu'il n'y aura pas de connexion Internet

Je ne peux pas utiliser le stockage web en raison de limites de quota - je compare SQLite et DB indexé .

  • SQLite semble être le meilleur ajustement, mais il est obsolète
  • DB indexé est une bonne alternative, mais il n'y a pas de Safari prise en charge - une application hybride est censé être exécuté sur l'iPad et sur un appareil Android dans le futur.

je suis confus dans la sélection de L'API. Y at-il une autre alternative à SQLite ou le soutien de DB indexé prévu sur Safari?

23
demandé sur Peter Mortensen 2012-09-03 15:55:10

8 réponses

je pense qu'abandonner IndexedDB serait une mauvaise idée, parce que c'est probablement le format du futur, donc Safari pourrait arrêter de supporter WebSQL.

il semble qu'il existe diverses solutions JavaScript pour combler l'écart entre les deux-sauver dans celui qui est disponible sur le navigateur de l'utilisateur: Bibliothèque JavaScript à Pont IndexedDB et WebSQL Je pense que c'est probablement votre meilleure solution.

14
répondu Robin Winslow 2017-05-23 11:54:37

tout D'abord, celui qui a été déprécié par W3C est WebSQL pas SQLite

IndexedDB -

  • il est incompatible avec de nombreux types d'OS mobiles et n'est compatible qu'avec certains types de versions d'OS mobiles
  • les développeurs ne peuvent pas utiliser SQL avec IndexedDB. Ils peuvent avec SQLite et WebSQL
  • la plupart des développeurs évitent d'utiliser IndexedDB autant qu'ils le peuvent

WebSQL -

  • il a été déprécié par W3C ce qui signifie qu'il n'est plus entretenu ou développé
  • il nécessite un autre plugin appelé Polyfill pour permettre aux applications mobiles de fonctionner avec des systèmes D'exploitation mobiles populaires tels que Google Android et Apple iOS

SQLite -

  • il a reçu un prix de Google
  • SQLite a son officiel site. IndexedDB et WebSQL ne pas
  • sur Google, SQLite renvoie 4,3 millions de résultats. WebSQL renvoie un peu moins de 700K de résultats et IndexedDB renvoie 282K de résultats.

si vous voulez un tutoriel rapide sur SQLite,

Stockage De La base de données SQLite utilisant Android et Phonegap

12
répondu KershawRocks 2017-05-23 12:09:58

Oui, L'API IndexedDB est géniale et tous les navigateurs le supporteront dans un avenir proche.

je recommande définitivement ma propre solution https://bitbucket.org/ytkyaw/ydn-db c'est un enveloppement très fin pour IndexedDB et retomber sur Sqlite pour safari.

5
répondu Kyaw Tun 2012-09-03 14:43:17

IndexedDB est très probablement la base de données prise en charge de l'avenir et il serait préférable d'aller avec cela au lieu de WebSQL. Comme L'a souligné Raymond, il est préférable de faire référence à http://www.caniuse.com pour voir la prise en charge actuelle/future à la fois dans les navigateurs de bureau et Mobiles.

Selon les besoins de votre solution, vous pourriez être très bien avec l'une des nombreuses bibliothèques JavaScript qui sont disponibles qui utilisent le stockage local et fournir une interface de requête. Une des bibliothèques, qui a bien fonctionné pour moi est Lawnchair .

3
répondu Romin 2014-07-21 17:38:21

si vous ne voulez pas choisir entre IndexedDB ou WebSQL, vous pouvez utiliser la bibliothèque Javascript PouchDB .

Je l'utilise dans un Android Webview pour stocker des données hors ligne et il fonctionne assez bien. Les données sont stockées dans une base de données locale (en utilisant IndexedDB ou WebSQL) s'il n'y a pas de connexion internet disponible et sont synchronisées avec une base de données distante ( CouchDB base de données) lorsqu'il y a une connexion disponible.

PouchDB dépendra de IndexedDB mais retombera sur WebSQL si IndexedDB n'est pas supporté. Il y a aussi la possibilité d'utiliser un plugin SQLite pour Cordova/PhoneGap.

2
répondu hhh 2015-04-28 14:46:37

je voulais faire une petite édition pour mettre à jour cette question, car google nous dirige vers cette question si vous faites une recherche sur le sujet de websql, localStorage et indexedDB. L'édition a été rejetée, donc je poste comme une réponse.

comme d'autres l'ont indiqué dans leurs réponses, IndexedDB manquait un peu auparavant de support et de contenu sur le web pour sa documentation et ses spécifications.

mais le support IndexedDB a été très largement amélioré pour mobile . Il s'est tellement amélioré que le seul navigateur qui n'a aucun support ou quoi que ce soit, est Opera Mini, , mais il a seulement 0,34% de l'utilisation du marché .

A partir de 2015, je suggérerais à tout développeur de passer à IndexedDB, car WebSQL a été déprécié et IE et Firefox ont cessé de le supporter (c'est plus de 15% de l'utilisation du marché pour ces seuls!) et SQLite perd rapidement de l'espace pour IndexedDB, qui ont maintenant vraiment bon sources de documentation , beaucoup . certains officiels aussi bien !. Certaines entreprises de TI motivent même l'utilisation, comme IBM .

je vais l'utiliser, et je n'ai pas rencontré de problèmes jusqu'à présent. Safari a ajouté une prise en charge, et tous les principaux navigateurs ainsi. Allez-y!

EDIT: un addendum personnel: J'ai essayé IndexedDB. Je suis Senior dans mon équipe, et la syntaxe IndexedDB est trop compliqué et complexe pour les petits problèmes de stockage - j'ai fini par utiliser localstorage pour sauvegarder quelques données JSON simples et les analyser quand j'en ai besoin. Beaucoup mieux pour n'importe qui dans mon équipe de l'obtenir (moi aussi, bien sûr!)

2
répondu Malavos 2015-08-12 20:37:50

c'est peut-être en retard pour le jeu, mais vous pouvez regarder: SequelSphere

C'est une base de données relationnelle 100% HTML5/JavaScript qui fonctionne cross-browser et utilise le stockage local pour persister ses données. Vous pouvez utiliser SQL pour le questionner aussi. C'est son propre moteur de base de données, et ne s'appuie pas sur les bases de données relationnelles intégrées (WebSQL). En tant que tel, il fonctionnera sur tous les navigateurs.

alors qu'il ne supporte actuellement localStorage, l'idée est de soutenir toutes les normes à l'avenir. Comme les navigateurs prennent en charge d'autres types de persistance, SequelSphere en profiterait. Le positif est que vous codez seulement contre SequelSphere en utilisant le SQL standard, et laissez-le gérer la persistance.

néanmoins, soyez conscient que c'est un nouveau produit sur le marché, de sorte que vient à la fois positifs et négatifs.

1
répondu John Fowler 2012-10-05 17:39:18

comme d'autres l'ont souligné, depuis que cette question a été posée, webSQL a été déprécié , tandis que les implémentations IndexedDB existent maintenant dans tous les principaux fournisseurs de navigateur .

donc, pour quiconque peut se trouver ici face à la même décision à prendre, allez avec IndexedDB.

d'autres ici ont également laissé entendre, à juste titre, qu'un choix ne doit pas être fait entre les deux types de les bases de données. On peut simplement choisir (ou faire) une bibliothèque qui utilise n'importe quelle base de données disponible sur une machine client.

Check out BakedGoods si vous êtes à la recherche d'une telle bibliothèque. Il établit une interface uniforme qui peut être utilisée pour effectuer des opérations de stockage dans toutes les installations de stockage natives, et certains clients non natifs. Il maintient également la flexibilité et les options offertes à l'utilisateur par chacun.

avec lui, mener des opérations de stockage dans n'importe quel type de base de données est une question de...

... spécifiant les options d'exploitation appropriées et les configurations équivalentes pour les deux types de bases de données:

//If the operation is a set(), and the referenced structures 
//don't exist, they will be created automatically.

var webSQLOptionsObj = {
    databaseName: "Example_DB",
    databaseDisplayName: "Example DB",
    databaseVersion: "",
    estimatedDatabaseSize: 1024 * 1024,
    tableData: {
        name: "Main",
        keyColumnName: "lastName",
        columnDefinitions: "(lastName TEXT PRIMARY KEY, firstName TEXT)"
    }, 
    tableIndexDataArray: [name: "First_Name_Index", columnNames: "(firstName)"]
};

var indexedDBOptionsObj = {
    databaseName: "Example_DB",
    databaseVersion: 1,
    objectStoreData: {
        name: "Main",
        keyPath: lastName,
        autoIncrement: false
    },
    objectStoreIndexDataArray: [
        {name: "First_Name_Index", keyPath: "firstName", unique: false, multiEntry: false}
    ],
};

var optionsObj = {
    conductDisjointly: false, 
    webSQL: webSQLOptionsObj, 
    indexedDB: indexedDBOptionsObj
};

... et la conduite de l'opération:

bakedGoods.set({
    data: [
        {value: {lastName: "Obama", firstName: "Barack"}}, 
        {value: {lastName: "Biden", firstName: "Joe"}}
    ],
    storageTypes: ["indexedDB", "webSQL"],
    options: optionsObj,
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});

son interface simple et le soutien d'installation de stockage inégalé vient au coût de manque de soutien pour certaines configurations spécifiques d'installation de stockage. Pour par exemple, il ne supporte pas la conduction des opérations de stockage dans les tables WebSQL avec des touches primaires à plusieurs colonnes.

donc si vous faites un usage intensif de ces types de fonctionnalités, vous pouvez vouloir regarder ailleurs.

Oh, et par souci de totale transparence, BakedGoods est maintenu par ce gars juste ici :) .

1
répondu Kevin 2016-07-09 01:14:04