Проблема:
Мне нужно решение, не зависящее от устройства (например, HTML5), для хранения и запроса 250,000+ строк данных в автономном режиме на устройстве типа телефона или планшета (например, iOS/Android). Идея заключается в том, что у меня есть люди, работающие в удаленных районах без подключения к сотовой связи, и им нужно выполнять запросы к этим данным и редактировать их в автономном режиме. Частично это будет основано на геолокации, так что если есть активы в той области, где они находятся (используется GPS), то это покажет эти активы и позволит их редактировать. Когда они вернутся в офис, они смогут синхронизировать данные с офисным сервером.
Причина, по которой я подхожу к этому с точки зрения веб-стандартов, заключается в том, чтобы сэкономить деньги и время, написав это один раз на HTML5, и затем это будет работать на разных платформах, а не писать это дважды на Objective C и Java. Кроме того, если вы пишете что-то, не зависящее от платформы, вы не зациклены на ней и не идете ко дну вместе с кораблем, когда все переходят на новую платформу. У нас было похожее приложение, написанное для Windows Mobile 5, теперь оно бесполезно, поскольку эта платформа мертва.
Автономная база данных на устройстве должна быть:
Возможности:
Локальное хранилище HTML5:
Отлично подходит для небольших объемов данных
Минусы:
База данных Web SQL:
Минусы:
IndexedDB:
Хранилище объектов ключ/значение, похожее на локальное хранилище, только с индексами.
Минусы:
Это оставляет единственный вариант реализации устаревшего метода Web SQL, который может работать еще год или около того. IndexedDB и локальное хранилище в настоящее время непригодны.
Я не уверен, как Mozilla и Microsoft добились того, что стандарт Web SQL Database был устаревшим, и почему W3C позволил этому случиться. Предположительно, между ними 77% рынка браузеров для настольных компьютеров. На современных мобильных устройствах влияние Mozilla и Microsoft практически нулевое, поскольку Safari, Opera и Android занимают более 90% рынка. Как Mozilla и Microsoft могут диктовать, какой стандарт должен использоваться на мобильном рынке, где, скорее всего, будут использоваться автономные хранилища, не имеет никакого смысла.
В комментариях Mozilla о том, почему они решили использовать IndexedDB, говорится в основном об "эстетике разработчика", и им не нравится идея запуска SQL в JavaScript. Я не верю в это.
В настоящее время предлагаемый стандарт является неполноценным и представляет собой чрезвычайно базовую реализацию NoSQL, которая медленна и не поддерживает даже продвинутые функции, необходимые людям в базе данных. Есть много шаблонного кода для создания базы данных и получения данных из нее, но они утверждают, что люди напишут несколько хороших абстрактных библиотек поверх этого, которые обеспечат более продвинутые возможности. По состоянию на октябрь 2011 года их нигде не видно.
Они обесценили существующий стандарт Web SQL, который действительно работает и реализован в основных мобильных/планшетных браузерах. В то время как их "новый" и "лучший" стандарт недоступен в основных мобильных браузерах.
Что мы, разработчики, должны использовать в течение следующих 3-5 лет, когда спецификация IndexedDB может быть стандартизирована, иметь больше возможностей, реализована в основных мобильных/планшетных браузерах и есть несколько хороших библиотек для облегчения работы?
W3C должен поддерживать стандарт Web SQL Database параллельно и просто исправлять проблемы. В нем уже есть поддержка основных мобильных платформ, и он работает довольно хорошо. Тот факт, что Mozilla и Microsoft, как два игрока с наибольшей долей браузеров для настольных компьютеров, смогли добиться отмены этого стандарта, довольно сомнителен и может рассматриваться как попытка помешать прогрессу мобильных веб-платформ, пока они не смогут догнать и предложить конкурирующие решения против iOS/Safari и Android.
В заключение, есть ли у кого-нибудь решение для моей проблемы, которое будет работать для iOS/Android для телефонов/планшетов. Может быть, хороший обёрточный API, который может использовать несколько реализаций баз данных в фоновом режиме с возможностью запросов и позволяет вам выбирать, какая база данных имеет приоритет. Я видел что-то вроде lawnchair, но я уверен, что по умолчанию он позволяет использовать только локальное хранилище и отступает перед другими. Думаю, я бы предпочел, чтобы он использовал Web SQL (по умолчанию), а не более медленные варианты.
Любая помощь в решении будет очень признательна, спасибо!