问题:
我需要一个与设备无关的解决方案(例如HTML5),用于在电话或平板电脑类型的设备(例如iOS / Android)上离线存储和查询250,000多行数据。我的想法是让人们在没有任何蜂窝数据连接的情况下在偏远地区工作,他们需要对此数据运行查询并在脱机时对其进行编辑。部分将基于地理位置,因此,如果资产所在的区域中有资产(使用GPS),则它将显示这些资产并进行编辑。当他们返回办公室时,他们可以将数据同步回办公室服务器。
我从Web标准的角度来解决这个问题的原因基本上是为了节省金钱和时间,方法是在HTML5中编写一次,然后在多个平台上工作,而不是在Objective C和Java中编写两次。同样,如果您编写的内容与平台无关,那么您就不会被锁定,并且当每个人都迁移到更新的版本时,都不会陷入困境。我们有一个为Windows Mobile 5编写的类似应用程序,但由于该平台已失效,它已无用。
设备上的离线数据库必须为:
- 快速(响应时间少于2秒)
- 可能执行联接并与能够查询数据库的其他表有关系
- 根据GPS读数,通过x和y坐标选择某个范围或标准内的数据。
选项:
HTML5本地存储:
对于少量<5,000个键/值的数据,如果将其转换为JSON,您甚至可以在其中存储数组/对象。
缺点:
- 即使在高端计算机上,超过10,000行的浏览器也会缓慢爬行。
- 无法对数据进行复杂的查询以提取所需的数据,因为您必须遍历整个存储并手动搜索它。
- 可以存储的存储空间的限制
Web SQL数据库:
- 符合要求。
- 快速在250,000行上运行查询(1-2秒)
- 可以创建复杂的查询,联接等
- 受Safari,Android和Opera支持,因此可在iOS和Android设备上使用
缺点:
- 自2010年11月起弃用
- 跨目录攻击的安全漏洞。并不是真正的问题,因为我们不会共享托管
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的评论中,主要是关于“开发者审美”的,他们不喜欢在JavaScript中运行SQL的想法。我不买。
目前,提出的标准还很差,并且是一个极其基本的NoSQL实现,该实现很慢,甚至不支持人们在数据库中所需的高级功能。建立数据库和获取数据有很多样板代码,但他们声称人们会在其顶部编写一些不错的抽象库,这些库将提供更多高级功能。截至2011年10月,它们无处可寻。
他们已经弃用了现有的Web SQL标准,该标准实际上有效并已在主要的移动/平板电脑浏览器中实现。而在主要的移动浏览器中没有它们的“新”和“更好”标准。
在接下来的3-5年中,作为IndexedDB规范可能逐步标准化,具有更多功能,在主要的移动/平板电脑浏览器中实现的功能以及一些易于使用的好的库,开发人员应该使用什么?
W3C应该保持Web SQL数据库标准并行运行,并解决问题。它已经支持主要的移动平台,并且运行良好。Mozilla和Microsoft作为拥有最多桌面浏览器份额的两个播放器能够取消此标准的事实是相当可疑的,并且可以被视为试图阻止移动Web平台上的进展,直到他们能够赶上并提供该标准。与iOS / Safari和Android竞争的解决方案。
总之,没有人能解决我的问题,该解决方案适用于适用于手机/平板电脑设备的iOS / Android。也许是一个不错的包装器API,它可以在后台使用具有查询功能的多个数据库实现,并允许您选择哪个数据库具有优先级。我见过草椅之类的东西,但我敢肯定,它默认只允许您使用本地存储,而后退到其他位置。我想我宁愿使用Web SQL(默认情况下),然后使用较慢的选项。
任何帮助解决方案的帮助,谢谢!