Разработка HTML5 решения для автономного хранения данных для iOS/Android в 2011 году

Проблема:

Мне нужно решение, не зависящее от устройства (например, HTML5), для хранения и запроса 250,000+ строк данных в автономном режиме на устройстве типа телефона или планшета (например, iOS/Android). Идея заключается в том, что у меня есть люди, работающие в удаленных районах без подключения к сотовой связи, и им нужно выполнять запросы к этим данным и редактировать их в автономном режиме. Частично это будет основано на геолокации, так что если есть активы в той области, где они находятся (используется GPS), то это покажет эти активы и позволит их редактировать. Когда они вернутся в офис, они смогут синхронизировать данные с офисным сервером.

Причина, по которой я подхожу к этому с точки зрения веб-стандартов, заключается в том, чтобы сэкономить деньги и время, написав это один раз на HTML5, и затем это будет работать на разных платформах, а не писать это дважды на Objective C и Java. Кроме того, если вы пишете что-то, не зависящее от платформы, вы не зациклены на ней и не идете ко дну вместе с кораблем, когда все переходят на новую платформу. У нас было похожее приложение, написанное для Windows Mobile 5, теперь оно бесполезно, поскольку эта платформа мертва.

Автономная база данных на устройстве должна быть:

  • быстрой (ответы менее 2 секунд)
  • потенциально способной выполнять соединения и иметь связи с другими таблицами, способной запрашивать базу данных
  • выбирать данные в определенном диапазоне или критериях, например, по координатам x и y на основе показаний GPS.

Возможности:

Локальное хранилище HTML5:

Отлично подходит для небольших объемов данных

Минусы:

  • Для более чем 10 000 строк даже на высокопроизводительной машине браузер будет замедляется.
  • Невозможно делать сложные запросы к данным, чтобы извлечь нужные данные, так как приходится итерационно просматривать все хранилище и искать их вручную.
  • Ограничения по объему хранимых данных

База данных Web SQL:

  • Отвечает требованиям.
  • Быстро выполняет запрос на 250 000 строк (1-2 секунды)
  • Может создавать сложные запросы, соединения и т.д.
  • Поддерживается Safari, Android и Opera, поэтому будет работать на устройствах iOS и Android

Минусы:

  • Устарела с ноября 2010 года
  • Недостаток безопасности при кросс-директорных атаках. Не является проблемой, поскольку мы не будем работать на виртуальном хостинге

IndexedDB:

Хранилище объектов ключ/значение, похожее на локальное хранилище, только с индексами.

Минусы:

  • Медленное выполнение запроса на 200 000 строк (15-18 секунд)
  • Невозможно выполнять сложные запросы
  • Невозможно выполнять соединения с другими таблицами
  • Не поддерживается основными телефонами или планшетными устройствами, например, iPad/Android
  • Стандарт не завершен

Это оставляет единственный вариант реализации устаревшего метода Web SQL, который может работать еще год или около того. IndexedDB и локальное хранилище в настоящее время непригодны.

Я не уверен, как Mozilla и Microsoft добились того, что стандарт Web SQL Database был устаревшим, и почему W3C позволил этому случиться. Предположительно, между ними 77% рынка браузеров для настольных компьютеров. На современных мобильных устройствах влияние Mozilla и Microsoft практически нулевое, поскольку Safari, Opera и Android занимают более 90% рынка. Как Mozilla и Microsoft могут диктовать, какой стандарт должен использоваться на мобильном рынке, где, скорее всего, будут использоваться автономные хранилища, не имеет никакого смысла.

В комментариях Mozilla о том, почему они решили использовать IndexedDB, говорится в основном об "эстетике разработчика", и им не нравится идея запуска SQL в JavaScript. Я не верю в это.

  1. В настоящее время предлагаемый стандарт является неполноценным и представляет собой чрезвычайно базовую реализацию NoSQL, которая медленна и не поддерживает даже продвинутые функции, необходимые людям в базе данных. Есть много шаблонного кода для создания базы данных и получения данных из нее, но они утверждают, что люди напишут несколько хороших абстрактных библиотек поверх этого, которые обеспечат более продвинутые возможности. По состоянию на октябрь 2011 года их нигде не видно.

  2. Они обесценили существующий стандарт Web SQL, который действительно работает и реализован в основных мобильных/планшетных браузерах. В то время как их "новый" и "лучший" стандарт недоступен в основных мобильных браузерах.

  3. Что мы, разработчики, должны использовать в течение следующих 3-5 лет, когда спецификация IndexedDB может быть стандартизирована, иметь больше возможностей, реализована в основных мобильных/планшетных браузерах и есть несколько хороших библиотек для облегчения работы?

W3C должен поддерживать стандарт Web SQL Database параллельно и просто исправлять проблемы. В нем уже есть поддержка основных мобильных платформ, и он работает довольно хорошо. Тот факт, что Mozilla и Microsoft, как два игрока с наибольшей долей браузеров для настольных компьютеров, смогли добиться отмены этого стандарта, довольно сомнителен и может рассматриваться как попытка помешать прогрессу мобильных веб-платформ, пока они не смогут догнать и предложить конкурирующие решения против iOS/Safari и Android.

В заключение, есть ли у кого-нибудь решение для моей проблемы, которое будет работать для iOS/Android для телефонов/планшетов. Может быть, хороший обёрточный API, который может использовать несколько реализаций баз данных в фоновом режиме с возможностью запросов и позволяет вам выбирать, какая база данных имеет приоритет. Я видел что-то вроде lawnchair, но я уверен, что по умолчанию он позволяет использовать только локальное хранилище и отступает перед другими. Думаю, я бы предпочел, чтобы он использовал Web SQL (по умолчанию), а не более медленные варианты.

Любая помощь в решении будет очень признательна, спасибо!

74
задан Peter Aron Zentai 18 May 2012 в 10:46
поделиться