我需要为iPad/平板电脑设备构建一个离线HTML5 Web应用程序,用户可以从服务器下载数据集(数据表)并将其存储在设备上。然后,用户可以断开与服务器的连接,并在设备上本地查看/编辑数据。这是为那些在偏远地区工作的人,那里没有Hive网络覆盖,需要收集/更新数据。当他们回到办公室时,他们可以将数据同步/上传回服务器。它需要HTML5的原因是它的平台无关,即可以在iOS,Android等上运行它,只要它有一个支持HTML5的现代Web浏览器。
现在我已经使用HTML5本地存储(用于数据)和HTML5离线应用程序缓存(用于页面/css/js/图像)构建了系统,它可以很好地处理小数据集(我可以在离线时查看,编辑和保存,在线时加载/同步)。现在我需要扩展到10,000行数据。它的工作,但它是相当慢,挂起浏览器10秒,而加载在英特尔四核8 GB的机器。
所以我一直在研究一些比本地存储更好的替代方案:
1)WebSQL:能够使用SQL语言查询数据并进行连接等。问题是它现在已经过时了,不再受支持,所以我不想花时间为它构建一些东西。
2)IndexedDB:使用对象存储(从技术上讲,我已经使用本地存储API存储对象,并使用JSON存储)。潜在的更快,因为它使用SQL Lite后端的索引。有很多样板代码可以完成简单的任务,比如创建数据库、向数据库添加数据、从数据库中阅读数据、迭代数据库。我只想做一个像select(xyc, abc).where(abc = 123).limit(20)
这样的简单查询,但却不得不编写大量的JavaScript代码来完成它。如何编写自己的代码来进行表之间的连接,有任何例子吗?
我发现了一个jQuery plugin可以让生活更简单。有没有其他的或者其他的库可以减轻使用IndexedDB的痛苦?
多谢了!
5条答案
按热度按时间c6ubokkw1#
我有一个开源的web database wrapper,它同时支持IndexedDB和WebSql。
版本迁移在感知之后处理。下面的代码将迁移(或初始化)到版本2。
Query非常灵活和强大。举例来说:
再次使用更有效的键范围查询,如果年龄被索引:
支持transaction。
5uzkadbs2#
试试linq2indexeddb。它有你想要的查询接口+与indexeddb shim for websql的WebSQL API也支持。
n3ipq98p3#
你有没有考虑过【草坪椅】?它提供了一个很好的底层存储抽象,还有用于查询,聚合和分页数据的插件。作为查询的示例:
我能看到的唯一潜在缺点是,它似乎不能处理迁移,并且通用似乎没有创建索引等的方法。
关于连接,IndexedDB被设计为面向文档(无SQL)的存储,而不是关系数据库,但是考虑到这是一个常见的场景,似乎有两个选项:
1)2)如果上面的方法太慢,你也可以创建一个专用的键值对象存储,然后可以用来在相关的存储中进行索引查找。这可能是一件苦差事,具体取决于您的加入需求的数量。
ldioqlga4#
我认为JsStore会为你工作。
假设你的查询在sql中看起来像这样-
select * from table_name where column1='abc' limit 20
在JsStore-它将是
所以你可以用JsStore写类似于sql的查询。
1qczuiv05#
将IndexedDB的 Package 器版本同步到localStorage API。我找不到这些 Package 器的任何同步版本,因为IndexedDB是同步的,localStorage是同步的,所以我需要做一些黑客https://gist.github.com/xnohat/b7aa5035278478871697b7ad6255efb2