Разработка решения для автономного хранения HTML5 для iOS / Android в 2011 году
проблема:
Мне нужно решение устройства agnostic (например, HTML5) для хранения и запроса 250 000+ строк данных в автономном режиме на устройстве типа телефона или планшета (например, iOS/Android). Идея заключается в том, что у меня есть люди, работающие в отдаленных районах без подключения к сотовым данным, и им нужно запускать запросы к этим данным и редактировать их в автономном режиме. Частично это будет геолокация, поэтому, если есть активы в области, в которой они находятся (использует GPS), то он покажет эти активы и пусть их редактируют. Когда они возвращаются в офис, они могут синхронизировать данные обратно на сервер Office.
причина, по которой я подхожу к этому с точки зрения веб-стандарта, заключается в том, чтобы сэкономить деньги и время, написав его один раз в HTML5, а затем он работает на нескольких платформах, а не пишет его дважды в Objective C и Java. Кроме того, если вы пишете что-то, что является агностиком платформы, тогда вы не заперты и не спускаетесь с корабля, когда все переходят на более новый один. У нас было аналогичное приложение, написанное для Windows Mobile 5, теперь это бесполезно, так как эта платформа мертва.
автономная база данных на устройстве должна быть:
- быстро (ответы до 2 секунд)
- потенциально выполнять соединения и иметь отношения с другими таблицами, способными запрашивать базу данных
- выберите данные в пределах определенного диапазона или критериев, например, по координате x & y на основе GPS чтение.
варианты:
локальное хранилище HTML5:
штраф для небольших объемов данных
плюсы:
- для более чем 10 000 строк даже на хай энд аппарат браузер
медленно ползти. - не удается выполнить сложные запросы к данным, чтобы вытащить данные вы хотите, как вы должны перебирать все хранилище и вручную искать его.
- ограничения с количеством хранения, которое может быть сохранено
база данных Web SQL:
- отвечает требованиям.
- быстро выполнить запрос на 250 000 строк (1-2secs)
- можно создавать сложные запросы, объединения и т. д.
- поддерживается Safari, Android и Opera, поэтому будет работать на iOS и Android устройств
плюсы:
- устарел по состоянию на ноябрь 2010 года
- недостаток безопасности с кросс-атак. Не очень проблема, так как мы не будем на общем хостинге
IndexedDB:
хранилище объектов ключа/значения аналогично локальному хранилищу, за исключением индексов.
плюсы:
- медленно выполнить запрос на 200,000 строки (15-18secs)
- не удается выполнить сложные запросы
- не могу сделать соединения с другими таблицами
- не поддерживается основными телефонными или планшетными устройствами, например 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-оболочка, которая может использовать несколько баз данных реализации в фоновом режиме с возможностью запроса, и это позволяет выбрать, какая база данных имеет приоритет. Я видел такие вещи, как шезлонге но я уверен, что он позволяет использовать только локальное хранилище по умолчанию и возвращается к другим. Я думаю, что я бы предпочел использовать веб-SQL (по умолчанию), а затем более медленные параметры.
любая помощь для решения очень ценится, спасибо!
7 ответов:
Я бы рекомендовал проверить JayData библиотека, которая на самом деле имеет точную цель создания агностического уровня доступа к данным для мобильных устройств. JayData предоставляет слой абстракции с JavaScript Language Query (JSLQ) и поддержка JavaScript CRUD, и давайте вы будете работать точно так же с различными типами автономных и онлайн-хранилищ данных. JayData поддерживает работу со сложными сущностями, а также отношения сущностей либо локально, либо удаленно.
на момент написания JayData поддерживает следующие магазины или протоколы: webSQL (sqLite)/IndexedDB/OData/YQL/FBQL.
ваша конкретная проблема с различными системами, предоставляющими различные механизмы хранения, может быть легко решена с помощью резервной функции поставщика JayData: он будет использовать любой уровень хранения, который он может найти, но все же предоставляет тот же API для кода потребителя.
с учетом того, что WebSQL устарел к 2012 году: в то время из написания это WebSQL, который по-прежнему имеет 95% покрытие устройства, включая Samsung SmartTV и amazon Kindle. Проверьте kindle выполнение модульных тестов WebSQL с помощью JayData.
Я бы проверил CouchBase Lite. Это почти полнофункциональная реализация CouchDB, который работает на Android и iOS.
Если вы завернули свое приложение в что-то вроде PhoneGap вы можете создавать собственные приложения HTML 5 для обеих платформ, и вам нужно будет только немного программировать на Android/iOS для реализации CouchDB.
плюсы:
- Fast View engine для запросов по многим строкам данных.
- грязь простая и мощная поддержка репликации испеченная внутри.
плюсы:
- Key-Value Store-это займет некоторое время, чтобы привыкнуть.
Я сделал еще несколько исследований, ища решение для моего собственного проекта. Похоже, что эта библиотека довольно перспективна:http://nparashuram.com/IndexedDBShim/
Это позволяет использовать IndexedDB API, имеющий WebSQL за кулисами.
Это тесты проходят на последних iPad, iPhone 5, Android 4.2.2.
надеюсь, это кому-то поможет.
Я бы сказал вам использовать Корона для него . Это частная платформа, используемая для кросс-мобильных приложений, которая поддерживает SQLite .
плюсы
- это легко и имеет большую поддержку для SQLite , и не нужно делать странные вещи с HTML5 storage
минусы
- вы должны заплатить за него, если вы хотите использовать его в Android Market или iOS Market.
я вставляю сюда то, что они говорят об этом:
Corona включает поддержку баз данных SQLite на всех платформах. Это основанный на встроенной поддержке sqlite на iPhone, и скомпилированный версия SQLite на Android. Обратите внимание, что это увеличивает размер Android binary by 300K.
SQLite доступен во всех версиях Android, iPhone и iPad, а также а также В симуляторе короны...
" Я видел такие вещи, как lawnchair, но я уверен, что он позволяет использовать только локальное хранилище по умолчанию и возвращается к другим. Я думаю, что я бы предпочел использовать веб-SQL (по умолчанию), а затем более медленные параметры."
это настраивается, каждый из "адаптеров" для механизмов хранения является автономным, вы можете передать адаптер конструктору Lawnchair или, альтернативно, изменить порядок, в котором он возвращается к другим параметрам хранения, объединив файлы javascript по-разному при создании библиотеки. например, для индексированного-db затем возвращается к sqlite, а затем передает sqlite:
git clone https://github.com/brianleroux/lawnchair.git cd lawnchair cat src/Lawnchair.js src/adapters/indexed-db.js src/adapters/webkit-sqlite.js src/adapters/gears-sqlite.js > my_lawnchair.jsконечно, как показывают другие ответы, вы можете обернуть свой html5 в собственное приложение с помощью phonegap и т. д. тогда у вас будет много вариантов, но если вы хотите придерживаться веб-стандартов, то это может быть хорошим способом, пока мы не получим широкое внедрение IndexedDB.
Почему бы не написать простой механизм хранения в javascript (который охватывает "стандартную" часть)? По-видимому, вам не нужно ничего очень причудливого, поэтому не нужно слишком много усилий, чтобы он работал.
Я бы сделал следующее:
- хранить все в bson или аналогичном двоичном формате.
- разбирать и создавать индексы в файлах,а также читать при запуске.
- запрос с помощью javascript и чтение из большого файла с вашего (offline очевидно) веб-приложение.
- сохранить обновленные объекты отдельно.
такое решение возможно лишь в том случае, если база данных достаточно проста. Но я думаю, что это может работать ... поддержка JavaScript на мобильных устройствах.
вдохновения здесь - это реализация Btree+ в javascript.
для чтения локальных файлов вам понадобится файл API, который может быть использован для доступ к локальным файлам. Это поддерживается в большинстве современных браузеров, даже Safari 6. Я не смог определить, поддерживают ли текущие браузеры iPhone этот API.
Это worths, чтобы проверить мою библиотеку с открытым исходным кодомhttps://bitbucket.org/ytkyaw/ydn-db/wiki/Home
модуль базы данных Javascript для механизмов хранения Indexeddb, WebDatabase (WebSQL) и WebStorage (localStorage), поддерживающих миграцию версий, расширенный запрос и транзакцию.
будучи библиотекой NoSQL, join является ручным, но не невозможным. В библиотеке уже есть ключевые алгоритмы соединения.
Comments