问题是:
我需要一个与设备无关的(例如 HTML5)解决方案,用于在手机或平板电脑类型的设备(例如 iOS/Android)上离线存储和查询25万多行数据。我的想法是让人们在没有蜂窝数据连接的偏远地区工作,他们需要对这些数据进行查询,并在离线时进行编辑。部分是基于地理位置的,所以如果有资产在他们所在的地区(使用 GPS) ,然后它会显示这些资产,让他们被编辑。当他们返回办公室时,他们可以将数据同步回办公室服务器。
我之所以从 Web 标准的角度来看待这个问题,基本上是为了节省金钱和时间,用 HTML5编写一次,然后在多个平台上工作,而不是用 Objective C 和 Java 编写两次。另外,如果你写的东西是平台不可知的,那么你就不会被锁在里面,也不会在大家都搬到新的平台的时候和船一起沉没。我们曾经为 WindowsMobile5编写过一个类似的应用程序,现在它已经没用了,因为这个平台已经死了。
设备上的脱机数据库需要:
选择:
HTML5本地存储:
对于少量 < 5,000键/值的数据,如果将其转换为 JSON,甚至可以在其中存储数组/对象。
缺点:
网络 SQL 数据库:
缺点:
IndexedDB:
键/值对象存储与本地存储类似,但带有索引。
缺点:
这就留下了实现已废弃的 Web SQL 方法的唯一选择,该方法可能只能再工作一年左右。IndexedDB 和本地存储目前无法使用。
我不知道 Mozilla 和微软是如何废弃 Web SQL 数据库标准的,也不知道 W3C 为什么会让这种情况发生。据说他们占据了桌面浏览器市场77% 的份额。在先进的移动设备上,Mozilla 和微软几乎没有像 Safari,Opera 和 Android 占有超过90% 的市场份额那样的影响力。Mozilla 和微软如何决定哪些标准应该在移动市场上使用,哪些地方最有可能使用离线存储是没有任何意义的。
在 来自 Mozilla 的评论中,他们为什么要使用 IndexedDB,主要是关于“开发者美学”,他们不喜欢在 JavaScript 中运行 SQL 的想法。我不信。
目前提出的标准是劣质的,是一个非常基本的 NoSQL 实现,速度很慢,甚至不支持人们在数据库中需要的高级特性。有很多样板代码来建立数据库和获取数据,但是他们声称人们会在上面编写一些很好的抽象库来提供更高级的特性。截至2011年10月,他们已经消失得无影无踪。
他们已经否定了现有的 Web SQL 标准,该标准实际上可以在主要的移动/平板浏览器中实现。然而他们的“新”和“更好”的标准在主要的移动浏览器中并不可用。
作为开发人员,我们在未来3-5年里应该使用什么? 届时 IndexedDB 规范可能会开始标准化,在主要的移动/平板电脑浏览器中实现更多的功能,而且还有一些不错的库可以让事情变得更简单?
W3C 应该保持 Web SQL 数据库标准并行运行,并仅仅修复这些问题。它已经支持主要的移动平台,而且运行良好。Mozilla 和微软作为桌面浏览器市场份额最大的两家公司能够废除这一标准,这一事实令人怀疑,并且可能被视为阻碍移动网络平台进步的一种尝试,直到它们能够赶上并提供与 iOS/Safari 和 Android 竞争的解决方案。
总而言之,是否有人能为我的问题找到一个解决方案,可以在 iOS/Android 手机/平板电脑设备上使用。也许是一个很好的包装器 API,它可以在后台使用具有查询功能的多个数据库实现,并且允许您选择哪个数据库具有优先级。我见过像 躺椅这样的东西,但是我很肯定它只允许您默认使用本地存储,并且回到其他的存储。我认为我宁愿它使用 Web SQL (默认情况下) ,而不是较慢的选项。
非常感谢您对解决方案的任何帮助,谢谢!