Проблема:
Мне нужно решение, не зависящее от устройства (например, HTML5), для хранения и запроса 250 000+ строк данных в автономном режиме на устройстве типа телефона или планшета (например, iOS / Android). Идея в том, что у меня есть люди, работающие в удаленных районах без подключения к сотовой сети, и им нужно выполнять запросы к этим данным и редактировать их в автономном режиме. Частично это будет основано на геолокации, поэтому, если в области, в которой они находятся (использует GPS), есть активы, он покажет эти активы и позволит их редактировать. Когда они вернутся в офис, они могут синхронизировать данные с офисным сервером.
Причина, по которой я подхожу к этому с точки зрения веб-стандартов, заключается в том, чтобы сэкономить деньги и время, написав его один раз в HTML5, а затем он будет работать на нескольких платформах, а не писать дважды в Objective C и Java. Кроме того, если вы напишете что-то, что не зависит от платформы, вы не заблокированы и не упадете вместе с кораблем, когда все перейдут на новый. У нас было аналогичное приложение, написанное для Windows Mobile 5, но теперь оно бесполезно, поскольку эта платформа мертва.
Автономная база данных на устройстве должна быть:
- быстро (ответы менее 2 секунд)
- потенциально выполнять соединения и иметь отношения с другими таблицами, которые могут запрашивать базу данных
- выберите данные в пределах определенного диапазона или критериев, например по координатам x и y на основе показаний GPS.
Параметры:
Локальное хранилище HTML5:
Прекрасно подходит для небольших объемов данных ‹5000 ключей / значений, вы даже можете хранить в нем массивы / объекты, если конвертируете его в JSON.
Минусы:
- Для более чем 10 000 строк даже на высокопроизводительном компьютере браузер замедлит сканирование.
- Невозможно выполнять сложные запросы к данным, чтобы извлечь нужные данные, поскольку вам нужно перебирать все хранилище и вручную искать его.
- Ограничения по объему хранилища, которое может быть сохранено
База данных SQL в Интернете:
- Отвечает требованиям.
- Быстро выполнить запрос на 250 000 строк (1-2 секунды)
- Может создавать сложные запросы, объединения и т. Д.
- Поддерживается Safari, Android и Opera, поэтому будет работать на устройствах iOS и Android.
Минусы:
- Устарело с ноября 2010 г.
- Недостаток безопасности при кросс-каталоговых атаках. На самом деле это не проблема, так как мы не будем на виртуальном хостинге
IndexedDB:
Хранилище объектов типа "ключ-значение" аналогично локальному хранилищу, за исключением индексов.
Минусы:
- Медленно запускает запрос на 200000 строк (15-18 секунд)
- Не могу выполнять сложные запросы
- Невозможно объединиться с другими таблицами
- Не поддерживается основным телефоном или планшетом, например iPad / Android
- Стандарт не завершен
Остается единственный вариант - реализовать устаревший метод Web SQL, который может работать только год или около того. IndexedDB и локальное хранилище в настоящее время непригодны для использования.
Я не уверен, как Mozilla и Microsoft объявили устаревшим стандарт базы данных Web SQL и почему 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 (по умолчанию), чем более медленные варианты.
Любая помощь в решении очень ценится, спасибо!