Проблема:
Мне нужно решение, не зависящее от устройства (например, HTML5), для хранения и запроса более 250 000 строк данных в автономном режиме на устройстве типа телефона или планшета (например, iOS / Android). Идея заключается в том, что у меня есть люди, работающие в удаленных районах без подключения к сотовой сети, и им нужно выполнять запросы к этим данным и редактировать их в автономном режиме. Частично это будет основано на географическом местоположении, поэтому, если в области, в которой они находятся (есть GPS), есть активы, то они отобразят эти ресурсы и позволят их редактировать. Вернувшись в офис, они могут синхронизировать данные с офисным сервером.
Причина, по которой я подхожу к этому с точки зрения веб-стандартов, заключается в том, чтобы в основном сэкономить деньги и время, написав один раз в HTML5, а затем он работает на нескольких платформах, а не дважды в Objective C и Java. Кроме того, если вы пишете что-то, что не зависит от платформы, то вы не заперты и не сходите с корабля, когда все переходят на новый. У нас было похожее приложение, написанное для Windows Mobile 5, теперь оно бесполезно, так как эта платформа мертва.
Автономная база данных на устройстве должна быть:
- быстро (ответы до 2 секунд)
- потенциально может выполнять соединения и иметь отношения с другими таблицами, способными запрашивать базу данных
- выбор данных в определенном диапазоне или критериях, например, по координате x & y на основе показаний GPS.
Опции:
локальное хранилище HTML5:
Штраф для небольших объемов данных <5000 ключ / значение, вы даже можете хранить массивы / объекты в нем, если вы преобразуете его в JSON. </p>
Минусы:
- Более 10000 строк даже на старшей машине браузер
медленно ползти.
- Невозможно выполнить сложные запросы к данным, чтобы извлечь нужные данные, так как вам приходится перебирать все хранилище и искать его вручную.
- Ограничения по объему хранилища, которое может быть сохранено
База данных 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 и почему W3C позволил этому случиться. Предположительно, между ними 77% рынка настольных браузеров. На продвинутых мобильных устройствах Mozilla и Microsoft почти не влияют, так как Safari, Opera и Android занимают более 90% рынка . То, как Mozilla и Microsoft могут диктовать, какой стандарт следует использовать на рынке мобильной связи, где наиболее вероятно использование автономного хранилища, не имеет никакого смысла.
В комментариях от Mozilla о том, почему вместо этого они хотели использовать IndexedDB, в основном говорится об «эстетике разработчика», и им не нравится идея запуска SQL в JavaScript. Я не покупаю это.
В настоящее время предлагаемый стандарт является худшим и является чрезвычайно базовой реализацией NoSQL, которая является медленной и даже не поддерживает расширенные функции, необходимые людям в базе данных.Существует много стандартного кода для создания базы данных и получения данных, но они утверждают, что люди напишут несколько хороших библиотек абстракций поверх них, которые обеспечат более продвинутые функции.По состоянию на октябрь 2011 года их нигде не было видно.
Они устарели в существующем стандарте Web SQL, который фактически работает и реализован в основных браузерах для мобильных устройств и планшетов.Принимая во внимание, что их «новый» и «лучший» стандарт недоступен в основных мобильных браузерах.
Что мы, как разработчики, должны использовать в течение следующих 3-5 лет, когдаСпецификация IndexedDB может дойти до стандартизации, иметь больше функций, реализованных в основных браузерах для мобильных устройств / планшетов, и есть несколько хороших библиотек, чтобы упростить задачу?
W3C должен поддерживать Web SQLБаза данных стандартно работает параллельно и просто исправляет проблемы.У него уже есть поддержка основных мобильных платформ, и он работает довольно хорошо.Тот факт, что Mozilla и Microsoft как два игрока с наибольшим количеством настольных браузеров смогли отказаться от этого стандарта, довольно сомнителен и может рассматриваться как попытка помешать прогрессу на мобильных веб-платформах, пока они не смогут догнать и предложитьконкурирующие решения против iOS / Safari и Android.
В заключение, у кого-нибудь есть решение для моей проблемы, которое будет работать для iOS / Android для телефонов / планшетов.Может быть, хороший API-оболочка, который может использовать несколько реализаций базы данных в фоновом режиме с возможностью запроса и позволяет вам выбирать, какая база данных имеет приоритет.Я видел такие вещи, как шезлонг , но я уверен, что он позволяет использовать только локальное хранилище по умолчанию и переключается на другие.Я думаю, что я предпочел бы, чтобы он использовал Web SQL (по умолчанию), а не более медленные варианты.
Любая помощь для решения очень ценится, спасибо!