Библиотека JavaScript для моста IndexedDB и WebSQL

Мне интересно, есть ли библиотека или проект, чтобы предоставить общий интерфейс для IndexedDB или WebSQL, в зависимости от поддержки браузера пользователя. Если они используют Chrome / Safari, используйте WebSQL, если они используют Firefox или Internet Explorer, используйте IndexedDB.

плакат этот вопрос похоже, что доморощенное решение, но не предоставило никакого исходного кода.

6 ответов


возможно, вы захотите пойти с шезлонге, что довольно хорошо известно, как упоминалось Гвидо Тапиа в вопросе, на который вы ссылаетесь.

либо это, либо используйте его picnet.данные.DataManager решение.

посмотрите настойчивость.js.


JasonCasden поделился огромным списком библиотек / оболочек на своей презентации в браузере хранения и меня. Вот список:

lawnchair
persistence.js
persistJS
amplify.store
localStorageDB
https://github.com/axemclion/IndexedDB
realStorage
YUI3 CacheOffline
dojox.storage
DomSQL
Impel
ActiveJS ActiveRecord
JazzRecord
picnet.data.DataManager
ShinyCar
lscache
Kizzy
Artemia
microcache.js
Store.js

я написал YDN-DB для точной цели. Это оболочка базы данных для IndexedDB, WebSql и localStorage, построенная поверх библиотеки закрытия.

цель

красивый API для безопасного надежного высокопроизводительного крупномасштабного веб-приложения.

особенности

  • поддержка механизмов хранения IndexedDB, Web SQL и localStorage.
  • хорошо протестированный модуль библиотеки закрытия.
  • версия поддержка миграция, шифрование,запрос и сделки.
  • каждый вызов метода является атомарной транзакцией. Все методы являются асинхронными.
  • следуйте обычному этикету javascript, такому как: одно пространство имен, нет глобального, нет глобирования ошибок (если мы не сказали вам об этом в doc), нет eval, параметризованный запрос, это это, ошибка кодирования ошибки.
  • доступен плагин JQuery (см. раздел Загрузки).

базовый использование

импорт lastest minified JS script (см. раздел Загрузки) в ваши HTML-файлы. Это создаст один объект в глобальной области, вызовите ydn.децибел.Место хранения.

var db = new ydn.db.Storage('db name');

db.setItem('x', 'some value')

db.getItem('x').success(function(value) {
  console.log('x = ' + value);
}

запрос

вычислить среднее значение с помощью query

q = db.query('customer').average('age');
avg = q.fetch()

ключевой запрос

q = db.query('customer', 'age').bound(18, 25, true).where('sex', '=', 'FEMALE').select('full_name')
young_girl_names = q.fetch()

сделки

p1 = db.key('player', 1);
db.transaction(function() {
   p1.get().success(function(p1_obj) {
        p1_obj.health += 10;
        p1.put(p123_obj);
   });
}, [p1]);

безопасность

строковые данные могут быть дополнительно зашифрованы с помощью шифра SHA-1.

db = new ydn.db.Store('store name')
db.setSecret(passphase); // generally send from server side upon login
db.setItem(key, value, 3600*1000); // data expire on one hour
db.getItem(key); // data will be decrypted using the provided passphase

взгляните на это:https://github.com/axemclion/IndexedDBShim

Это polyfill для включения IndexedDB с помощью WebSql. Я использую его, и я думаю, что это довольно хорошо, но, как и любое решение, у него есть некоторые ограничения, хотя вы можете развивать его почти все, что хотите, без больших проблем.


ответ на вопрос, я просто хочу поделиться обновлениями.

В Мае 2012 Года JayData была выпущена, которая является единой библиотекой доступа к данным для JavaScript и помогает управлять данными в базах данных IndexedDB, WebSQL, SQLite, MongoDB, HTML5 localStorage и Facebook, OData, WebAPI, YQL с тем же синтаксис запроса языка JavaScript.

изменение на IndexedDB из WebSQL означает только изменение типа хранилища провайдер:

var todoDB = new TodoDatabase({ 
    provider: 'webSql', databaseName: 'MyTodoDatabase' });

var todoDB = new TodoDatabase({ 
    provider: 'indexedDB', databaseName: 'MyTodoDatabase' });

если поставщик не указан, библиотека определяет доступное хранилище браузера / устройства в следующем порядке приоритетов (WebSQL, IndexedDB, HTML5 localStorage).

отказ от ответственности: я член команды разработчиков проекта с открытым исходным кодом JayData


Я надеюсь, что вы (OP) довольны решениями, предложенными в ответе, который вы приняли.

для тех, кто все еще охотится за способным решением (группа, которая может включать или не включать OP), проверьте BakedGoods.

это библиотека, которая устанавливает единый интерфейс, который может использоваться для проведения операций хранения во всех нативных и некоторых неродных клиентских хранилищах. Он также поддерживает гибкость и возможности, предоставляемые пользователь каждым.

С ним проведение операций хранения в любом из поддерживаемых типов баз данных является вопросом...

... указание соответствующих параметров операции и эквивалентных конфигураций для обоих типов баз данных:

//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
};

... и проводя операцию:

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

свой простой интерфейс и бесподобная поддержка объекта хранения приходят ценой отсутсвия поддержки для некоторых конфигураций объекта хранения специфических. Для например, он не поддерживает проведение операций хранения в таблицах WebSQL с многоколоночными первичными ключами.

поэтому, если вы активно используете эти типы функций, вы можете искать в другом месте.

О, и ради полной прозрачности, BakedGoods поддерживается вашим покорным слугой :).