2013-11-20 4 views
0

Хорошо, поэтому мне нужно реализовать довольно большую локальную базу данных для мобильных браузеров iOS и Android (~ 30 МБ). Я изучаю параметры, и похоже, что WebSQL (вариант, который я хотел использовать) активно прекращается. Кроме того, похоже, что IndexedSQL не поддерживается полностью.Какую базу данных браузера SQL использовать?

Что вы рекомендуете для базы данных локального браузера? Благодаря!

ответ

1

Я не думаю, что у вас есть другой выбор, кроме использования indexeddb. WebSQL устарел, а localstorage - небольшим, а не performante для удовлетворения потребностей.

Я написал библиотеку, которая реализует интерфейс, подобный linq. Используя методы, вы можете легко запросить базу данных. Пример:

linq2indexeddb.from("store").where("field").equals("value").select() 

Поскольку indexededdb является асинхронным, вы получите обещание.

Вы можете найти свою библиотеку в codeplex

2

IndexedDB с использованием IndexedDBShim (а polyfill для WebSQL), наверняка выглядит соответствует вашим требованиям. Но обратите внимание, что IOS-устройства позволяют хранить до 50 МБ памяти.

Я работал над аналогичным требованием, как и у вас, и эта комбинация работала во всех современных браузерах.

0

Я отвечаю на это в 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 поддерживается по-настоящему :).

Смежные вопросы