Я отвечаю на это в 2016 году (через 2 года после того, как вы задали этот вопрос) и все, что касается deprecation of WebSQL still stands. IndexedDB, с другой стороны, enjoys the support of all of the major browser vendors.
Теперь самое время сказать, что «IndexedSQL» не является альтернативным именем для IndexedDB, а также именем любой другой существующей клиентской базы данных :). Указание этого может показаться немного педантичным, но это не так: IndexedDB является нереляционным хранилищем документов и, как таковой, не поддерживает SQL.
Независимо от того, что вы называете это, IndexedDB в настоящее время является единственной базой данных на дорожке стандартов W3C и, как таковой, является единственным вариантом для будущего, предназначенным для выбора базы данных на стороне клиента.
Как подразумевается GemK, однако такое решение не обязательно должно быть сделано; можно просто выбрать (или создать) библиотеку, которая использует любую доступную базу данных на клиентской машине.
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){}
});
Его простой интерфейс и непревзойденную поддержку хранения объекта достигается за счет отсутствия Suppor t для некоторых конфигураций конкретного хранилища.Например, он не поддерживает проведение операций хранения в таблицах WebSQL с использованием нескольких столбцов первичных ключей.
Так что, если вы сильно используете эти функции, вы можете захотеть посмотреть в другом месте.
О, и для полной прозрачности, BakedGoods поддерживается по-настоящему :).