Проблема:
Мені потрібне рішення для агностики пристроїв (наприклад, 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 року
- Недолік безпеки при атаках між каталогами. Це насправді не проблема, оскільки ми не будемо брати участь у спільному хостингу
Проіндексовано:
Сховище об’єкта ключ / значення схоже на локальне сховище, за винятком індексів.
Мінуси:
- Повільний запуск запиту на 200 000 рядків (15-18 секунд)
- Не вдається запустити складні запити
- Не вдається об’єднати з іншими таблицями
- Не підтримується основними телефонними або планшетними пристроями, наприклад iPad / Android
- Стандарт не повний
Це залишає єдиний варіант реалізації застарілого методу Web SQL, який може працювати лише близько року. Індексована база даних і локальне сховище в даний час непридатні для використання.
Я не впевнений, як 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 і просто усувати проблеми. Він вже має підтримку основних мобільних платформ і працює досить добре. Той факт, що Mozilla та Microsoft, як два гравці з найбільшим обсягом браузера для настільних комп'ютерів, змогли отримати цей стандартний утилізаційний, досить сумнівний і може розглядатися як спроба перешкодити прогресу на мобільних веб-платформах, поки вони не зможуть наздогнати та запропонувати конкуруючі рішення проти iOS / Safari та Android.
На закінчення, чи є у когось рішення моєї проблеми, яке буде працювати для iOS / Android для телефонів / планшетів. Можливо, хороший API-обгортка, який може використовувати декілька реалізацій баз даних у фоновому режимі з можливістю запитів, і це дозволяє вибрати, яка база даних має пріоритет. Я бачив такі речі, як газонний стілець, але я впевнений, що це дозволяє вам використовувати лише локальне сховище за замовчуванням і повертається до інших. Я вважаю, що волію використовувати веб-SQL (за замовчуванням), а не повільніші варіанти.
Будь-яка допомога у вирішенні дуже вдячна, дякую!