Подтвердить что ты не робот

Автономный доступ - SQLite или индексированная БД?

Я участвую в R & D-фазе разработки приложения со следующими ключевыми требованиями:

  • HTML5 веб-приложение, которое также будет иметь гибридную версию
  • Данные форм будут храниться локально, если нет подключения к Интернету

Я не могу использовать веб-хранилище из-за ограничений квот. Я сравниваю SQLite и Индексированный DB.

  • SQLite лучше всего подходит, но он устарел
  • Индексированная БД - хорошая альтернатива, но там Safari поддержка. Предполагается, что гибридное приложение будет запущено на iPad и на устройства Android в будущем.

Я запутался в выборе API. Есть ли другая альтернатива SQLite или поддержка индексированного DB, ожидаемого в Safari?

4b9b3361

Ответ 1

Я думаю, что отказ от IndexedDB будет плохой идеей, потому что это, вероятно, формат будущего, поэтому Safari может перестать поддерживать WebSQL.

Похоже, что существуют различные решения JavaScript для устранения разрыва между двумя - экономия в зависимости от того, что доступно в браузере пользователя: Библиотека JavaScript для Bridge IndexedDB и WebSQL Я думаю, что это, вероятно, ваше лучшее решение.

Ответ 2

Прежде всего, тот, который устарел W3C, является WebSQL, а не SQLite

IndexedDB -

  • Он несовместим со многими типами мобильных ОС и совместим только с некоторыми типами версий мобильной ОС.
  • Разработчики не могут использовать SQL с IndexedDB. Они могут работать с SQLite и WebSQL
  • Большинство разработчиков активно избегают использования IndexedDB столько, сколько они могут

WebSQL -

  • Он устарел от W3C, что означает, что он больше не поддерживается или не развивается
  • Для этого требуется еще один плагин под названием Polyfill, чтобы мобильные приложения могли работать с популярными мобильными ОС, такими как Google Android и Apple iOS

SQLite -

  • Он получил награду от Google
  • SQLite имеет официальный сайт. IndexedDB и WebSQL не
  • В Google SQLite возвращает 4,3 миллиона результатов. WebSQL возвращает бит менее 700 тыс. Результатов, а IndexedDB возвращает результаты 282 К.

Если вам нужен быстрый учебник по SQLite,

Хранение базы данных SQLite с помощью Android и Phonegap

Ответ 3

Да, IndexedDB API отлично работает, и все браузеры будут поддерживаться в ближайшем будущем.

Я определенно рекомендую свое собственное решение https://bitbucket.org/ytkyaw/ydn-db, это очень тонкая оболочка для IndexedDB и возвращается в Sqlite для сафари.

Ответ 4

IndexedDB, скорее всего, является поддерживаемой базой данных будущего, и было бы лучше пойти с этим вместо WebSQL. Как указал Раймонд, лучше всего обратиться к http://www.caniuse.com, чтобы увидеть текущую/будущую поддержку как в настольных, так и в мобильных браузерах.

В зависимости от текущих потребностей вашего решения вы можете быть в порядке с одной из многих доступных библиотек JavaScript, которые используют локальное хранилище и предоставить интерфейс запроса. Одна из библиотек, которая хорошо сработала для меня, - Lawnchair.

Ответ 5

Если вы не хотите выбирать между IndexedDB или WebSQL, вы можете использовать библиотеку Javascript PouchDB.

Я использую его в Android Webview для хранения автономных данных, и он работает очень хорошо. Данные хранятся в локальной базе данных (с использованием IndexedDB или WebSQL), если нет доступного интернет-соединения и синхронизируется с удаленной базой данных (CouchDB), когда есть доступное соединение.

PouchDB будет зависеть от IndexedDB, но вернуться к WebSQL, если IndexedDB не поддерживается. Существует также возможность использовать плагин SQLite для Cordova/PhoneGap.

Ответ 6

Я хотел сделать небольшое изменение, чтобы обновить этот вопрос, поскольку Google направляет нам этот вопрос, если вы проводите исследование по теме websql, localStorage и indexedDB. Редактирование было отклонено, поэтому я отправляю в качестве ответа.

Как указывали другие пользователи в своих ответах, IndexedDB немного раньше не нуждался в поддержке и содержимом в Интернете для документации и спецификации.

Но поддержка IndexedDB была значительно улучшена для мобильных устройств. Он настолько улучшился, что единственный браузер, у которого нет поддержки или вообще нет, - Opera Mini, но он имеет только 0,34% использования на рынке.

По состоянию на 2015 год я предлагаю любому разработчику перейти на IndexedDB, поскольку WebSQL устарел, а IE и Firefox перестали его поддерживать (это более 15% использования на рынке только для них!), и SQLite быстро теряет пространство IndexedDB, которые теперь действительно хорошие источники документации, many. Некоторые официальные, а также!. Некоторые ИТ-компании даже мотивируют использование, например IBM.

Я собираюсь использовать его, и до сих пор я не встречал никаких проблем. Safari добавила поддержку и всем основным браузерам. Пойдите для этого!

EDIT: личное дополнение: я попробовал IndexedDB. Я старший в своей команде, а синтаксис IndexedDB слишком грязный и сложный для небольших проблем с хранением. Я закончил использование localstorage для сохранения некоторых простых данных JSON и разбора его, когда мне это нужно. Лучше для всех, кто в моей команде это получить (я тоже, конечно!)

Ответ 7

Это может быть поздно в игре, но вы можете посмотреть: SequelSphere

Это 100% -ная реляционная база данных HTML5/JavaScript, которая работает кросс-браузер и использует локальное хранилище для сохранения данных. Вы также можете использовать SQL для запроса. Он является собственным механизмом базы данных и не полагается на встроенные (WebSQL) реляционные базы данных. Таким образом, он будет работать во всех браузерах.

Пока он поддерживает только localStorage, идея состоит в том, чтобы поддерживать все стандарты в будущем. Так как браузеры поддерживают другие типы настойчивости, SequelSphere воспользуется этим. Положительным является то, что вы только кодируете SequelSphere с использованием стандартного SQL и позволяете ему обрабатывать постоянство.

Тем не менее, имейте в виду, что это новый продукт для рынка, поэтому он имеет как положительные, так и отрицательные стороны.

Ответ 8

Как уже отмечалось, поскольку этот вопрос задан, webSQL устарел, а реализации IndexedDB теперь существует во всех основных браузерах.

Таким образом, всем, кто может оказаться здесь, столкнулся с тем же самым решением, зайдите в IndexedDB.

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

Если вы ищете такую ​​библиотеку, просмотрите 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 поддерживается этим парнем прямо здесь:).