问题标签 [indexeddb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1210 浏览

javascript - GWT library for indexedDB

Is there a GWT library for HTML5 indexedDB functionality?

Or, alternatively, is there a Javascript one I could wrap for GWT?

0 投票
3 回答
24155 浏览

javascript - 错误“试图对不允许突变的数据库进行突变操作。” 在 indexedDB 中检索数据时

我有这个简单的示例代码:

我得到这个:

试图对不允许突变的数据库进行突变操作。” 代码:“6

在线的

无法弄清楚 - 我做错了什么?

0 投票
1 回答
715 浏览

html - HTML5 web storage abstraction libraries

From what I've read of web storage in HTML5, there are a number of different storage options with varying support across different browsers.

Are there any popular libraries for abstraction of web storage in HTML5 applications?

0 投票
0 回答
99 浏览

html - HTML5 web storage support

Possible Duplicate:
HTML5 web storage abstraction libraries

From what I've read of web storage in HTML5, there are a number of different storage options with varying support across different browsers.

Is there one storage method which is considered best supported for structured data?

0 投票
1 回答
2683 浏览

javascript - IndexedDB 和多对多关系

你们都如何处理 IndexedDB 中的多对多关系?

例如,假设我有一个Blog用于保存博客文章的Tag对象和一个用于博客文章标签/标签的对象。一个Blog可以有多个Tags,一个Tag可以被多个Blogs使用。

我会创建一个blog storeand tag store(尽管我愿意接受建议)来容纳两种类型的对象:

我可以想到两种方法将两者联系起来:

  1. 有一个Blog.tags这将是一个BlogTag对象数组,其中包含blogIdtagId(并且也将在存储中进行检索)或
  2. 有一个可以用来查找 sBlog.tags的数组。tagIdTag

第一种方法似乎冗长,但这是如何在 SQL 中解决的。那只是我应该留下的SQL包吗?

我想第三种方法是有Blog.tags一个s数组Tag。这似乎最简单,但我无法查询Tags 或跨博客重用标签(或者我可以吗?)。

有没有其他人用 indexedDB 处理过这种情况?如果是这样,你最终做了什么?有哪些陷阱?

0 投票
4 回答
3215 浏览

javascript - IndexedDB 的包装函数

我需要为 iPad/平板电脑设备构建一个离线 HTML5 Web 应用程序,用户可以从服务器下载数据集(数据表)并将其存储在设备上。然后,用户可以断开与服务器的连接并在设备上本地查看/编辑数据。这适用于在没有蜂窝网络覆盖且需要收集/更新数据的偏远地区锻炼的人。当他们回到办公室时,他们可以将数据同步/上传回服务器。它需要 HTML5 的原因是它与平台无关,即只要它具有支持 HTML5 的现代 Web 浏览器,它就可以在 iOS、Android 等上运行。

现在我已经使用 HTML5 本地存储(用于数据)和 HTML5 离线应用程序缓存(用于 pages/css/js/images)构建了系统,并且它适用于小型数据集(我可以查看、编辑和保存离线时和在线时加载/同步)。现在我需要扩展到 10,000 行数据。它可以工作,但速度很慢,在英特尔四核 8GB 机器上加载时会挂起浏览器 10 秒。

所以我一直在研究一些比本地存储更好的替代方案:

1)WebSQL:将能够使用 SQL 语言查询数据并进行连接等。问题是它现在已被弃用,不再受支持,所以我不想花时间为它构建一些东西。

2) IndexedDB:使用对象存储(从技术上讲,我已经使用本地存储 API 存储对象并使用 JSON 存储)。可能更快,因为它使用带有 SQL lite 后端的索引。有很多样板代码可以完成简单的任务,例如创建数据库、添加数据库、读取数据库、迭代数据库。我只想做一个简单的查询,select(xyc, abc).where(abc = 123).limit(20)但必须编写大量的 JavaScript 代码来完成它。一个人如何编写自己的代码来在表之间进行连接,任何地方的例子?

我发现了一个jQuery 插件,它可以让生活变得更简单。周围是否有其他库或其他库可以减轻使用 IndexedDB 的痛苦?

非常感谢!

0 投票
2 回答
7855 浏览

ios - 在 HTML5 iOS 应用程序中安全地存储数据 - localStorage / WebSQL / IndexedDB 合适吗?

我正在编写一个要在 iOS 应用商店发布的 HTML5 应用程序。使用 PhoneGap 或包装在 UIWebView 控件中。

我对在为我的应用程序存储数据方面有哪些选择感到有些困惑。

是否使用适合在此类应用程序中存储应用程序数据的 localStorage、WebSQL 或 IndexedDB 技术?我将存储 JSON 和 XML 数据。

请记住,如果用户无意中删除了这些数据,那么他们将丢失他们的工作,这显然是我不希望发生的。

我知道减轻这种风险的唯一真正方法是将数据同步到“云”或其他在线系统——我可以在未来的版本中这样做,但不是现在。最初,如果这是一种合理稳定的做事方式,我只想将数据存储在本地。

据我了解,在清除 cookie 时,浏览器也会清除任何 localStorage 数据。所以这排除了这一点,因为我可以看到用户偶然这样做。

WebSQL 看起来不错——用户不会在 iOS 上无意中删除它。他们实际上必须进入浏览器设置并手动删除数据库。

但是 WebSQL 的缺点是,从我读过的内容来看,它将来可能不会被支持。

使用 IndexedDB,我不清楚该数据何时被清除。当 cookie 被删除时它是否也会被删除,或者 Safari 设置中的“数据库”选项是否控制它?

IndexedDB 是不是更好的解决方案,因为它将来会比 WebSQL 有更好的支持?

还有其他我不知道的更合适的解决方案吗?

0 投票
7 回答
14649 浏览

javascript - 2011年开发适用于iOS/Android的HTML5离线存储解决方案

问题:

我需要一个与设备无关(例如 HTML5)的解决方案,用于在手机或平板电脑类型的设备(例如 iOS/Android)上离线存储和查询 250,000 多行数据。我的想法是让人们在没有任何蜂窝数据连接的偏远地区工作,他们需要对这些数据运行查询并在离线时对其进行编辑。部分它将基于地理位置,因此如果他们所在的区域有资产(使用 GPS),那么它将显示这些资产并让它们进行编辑。当他们返回办公室时,他们可以将数据同步回办公室服务器。

我从 Web 标准的角度来处理这个问题的原因基本上是通过在 HTML5 中编写一次然后跨多个平台工作而不是在 Objective C 和 Java 中编写两次来节省金钱和时间。此外,如果您编写的东西与平台无关,那么您就不会被锁定,也不会在每个人都搬到更新的地方时随船而去。我们为 Windows Mobile 5 编写了一个类似的应用程序,现在它已经没用了,因为那个平台已经死了。

设备上的离线数据库需要是:

  • 快速(响应不到 2 秒)
  • 可能执行连接并与能够查询数据库的其他表建立关系
  • 选择特定范围或标准内的数据,例如根据 GPS 读数通过 x 和 y 坐标。

选项:

HTML5 本地存储:

对于 <5,000 个键/值的少量数据很好,如果将其转换为 JSON,您甚至可以在其中存储数组/对象。

缺点:

  • 即使在高端机器上超过 10,000 行,浏览器也会缓慢爬行。
  • 无法对数据进行复杂的查询以提取所需的数据,因为您必须遍历整个存储并手动搜索它。
  • 可以存储的存储量的限制

网络 SQL 数据库:

  • 符合要求。
  • 快速运行 250,000 行查询(1-2 秒)
  • 可以创建复杂的查询、连接等
  • 受 Safari、Android 和 Opera 支持,因此可在 iOS 和 Android 设备上运行

缺点:

  • 自 2010 年 11 月起已弃用
  • 跨目录攻击的安全漏洞。不是真正的问题,因为我们不会使用共享主机

索引数据库:

键/值对象存储类似于本地存储,除了索引。

缺点:

  • 在 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 的想法。我不买它。

  1. 目前提议的标准是劣质的,并且是一个非常基本的 NoSQL 实现,速度很慢,甚至不支持人们在数据库中需要的高级功能。有很多样板代码来建立数据库并获取数据,但他们声称人们会在其之上编写一些不错的抽象库,以提供更高级的功能。截至 2011 年 10 月,他们无处可寻。

  2. 他们已经弃用了现有的 Web SQL 标准,该标准实际工作并在主要的移动/平板电脑浏览器中实现。而他们的“新”和“更好”标准在主要的移动浏览器中不可用。

  3. 作为开发人员,我们应该在接下来的 3-5 年内使用什么,届时 IndexedDB 规范可能会逐渐标准化,拥有更多功能,在主要的移动/平板电脑浏览器中实现,并且有一些不错的库可以让事情变得更容易?

W3C 应该让 Web SQL 数据库标准保持并行运行并解决问题。它已经支持主要的移动平台,并且运行良好。Mozilla 和微软作为拥有最多桌面浏览器份额的两个玩家能够让这个标准废弃这一事实是相当可疑的,并且可以被视为试图阻碍移动网络平台的进展,直到他们能够赶上并提供与 iOS/Safari 和 Android 竞争的解决方案。

总之,是否有人为我的问题提供了适用于手机/平板设备的 iOS/Android 的解决方案。也许是一个很好的包装 API,它可以在后台使用具有查询功能的多个数据库实现,它允许您选择哪个数据库具有优先权。我见过诸如草坪椅之类的东西,但我很确定它只允许您默认使用本地存储并回退到其他存储。我想我宁愿它使用 Web SQL(默认情况下)然后是较慢的选项。

非常感谢您对解决方案的任何帮助,谢谢!

0 投票
4 回答
8254 浏览

html - 索引数据库性能

谁能指点我一篇关于 IndexedDB 性能的文章,或者最好提供一些关于 IndexedDB 性能的经验(最好是在 Chrome 中)——获取、插入和更新性能是什么样的?

似乎有合理的意见认为它对于超过几千条记录的数据集几乎无法使用,但我不确定这是否仅仅是由于缺乏索引 - 当然从概念上讲它不能比网络存储慢两者都可能在内部使用键值存储?

谢谢

0 投票
3 回答
20332 浏览

javascript - 导出和导入 IndexedDB 数据

我正在制作一个我自己使用的工具,它需要一个简单的数据库。这似乎是学习 HTML5 IndexedDB API 的好机会,但重要的是我不会在任何时候丢失数据。

我想备份浏览器的配置文件目录可以作为备份,但我也想可能与不同的计算机一起工作,所以导出和导入数据库会很好。有没有一种简单的方法来导出和导入 IndexedDB 数据库?特定于浏览器的解决方案是可以的。