PhoneGap使用哪种数据库,大小限制是多少?

67

我编写了一个HTML5数据库,它抽象了localStorage、indexedDB和WebSQL。使用纯HTML5时,我的数据库选项如下:

  • IE10 - indexedDB - 最大1GB
  • FireFox - indexedDB - 无限制
  • Safari - WebSQL - 最大50MB
  • Chrome - IndexedDB(或Web SQL)- 通过HTML5 Quota APIref1ref2无限制
  • Opera - WebSQL(直到他们切换到webkit?)- 无限制

我希望使用PhoneGap或Quota API扩展最大数据库大小。从PhoneGap的文档中看来,当前的PhoneGap数据库生态系统是:

  • WebSQL - Android、Blackberry、iPhone和webOS
  • localStorage - Windows Phone 7
  • indexedDB - Windows Phone 8,我猜indexedDB可用而WebSQL不可用的其他地方也是如此。

还有PhoneGap SqlLite插件。 iOSAndroidWindows Phone 8+


问题1 - 我对PhoneGap将使用哪种数据库的理解是否准确?

问题2 - 有关特定类型的PhoneGap数据库将存储多少数据的可靠文档资料吗?*如果它是PhoneGap数据库而不是浏览器的数据库实现。

问题3 - PhoneGap是否计划遵循Web Storage标准,从而放弃WebSQL,转向indexedDB?如果是这样,一旦转向indexedDB,我是否仍然能够使用我的现有WebSQL代码(通过内置的PhoneGap-polyfill)?

问题4 - 在数据库大小受限且无法通过PhoneGap或Quota API扩展的情况下,但可以访问文件系统时,是否可以合理地假设“额外”数据可以存储在设备的文件系统或SD卡上?


你的HTML5数据库抽象是开源的吗?链接呢? - B T
我希望是因为我认为我做得很好,想要展示它,但事实并非如此。这很难维护,因为随着浏览器越来越接近实现标准,代码会出现问题,或者某些浏览器需要使用不同的函数序列。我不建议尝试构建一个,除非你有人可以看管它。 - user1873073
3个回答

95

我的理解是,PhoneGap将使用什么数据库?

没错,PhoneGap可以使用LocalStorage、SessionStorage或SQLite数据库。你也可以使用PhoneGap通过插件连接到设备的原生类,并传递原生类数据,然后它将存储在设备上。

是否有关于PhoneGap各种不同类型数据库存储数据量的详细文档?如果是PhoneGap数据库而非浏览器数据库实现。

  1. LocalStorage :: 10MB
  2. SessionStorage :: 10MB
  3. SQLite Database :: 50MB-80MB(取决于设备)
  4. 使用插件调用的原生数据库 :: 无限数据量
  5. IndexedDB :: 5MB。仍存在。但非常错误,这里有一个运行它的设备/操作系统列表

PhoneGap是否计划遵循Web Storage标准,放弃WebSQL而转向indexedDB?如果是这样,当转到indexedDB时,我是否仍然能够使用我的现有WebSQL代码(通过内置的PhoneGap polyfill)?

WebSQL正在逐步被弃用。它的替代品是IndexedDB或SQLite。但对于您最好的选择是SQLite或原生数据库(例如在iOS上的Core Data)。

在数据库大小限制且不能通过PhoneGap或Quota API扩展的情况下,但可以访问文件系统时,可以合理地假定"额外"数据可能存储在设备的文件系统或SD卡上吗?

这是完全可能的。

  • 在Android上,您可以指定数据库的位置,并将数据推送到外部数据库。
  • 在iOS上,您可以使用原生数据库调用将数据存储在CoreData上,但没有外部存储器。
在所有操作系统中,您都可以创建一个类似于文本文件的平面数据库文件,将数据存储在键值列表中,然后在第一次运行应用程序时将其引入。但要注意这种情况下的内存管理。
我已经在我的答案中添加了有关如何编写SQLite和LocalStorage数据库的说明。

2
非常出色的回答,谢谢。IndexedDB 真的被淘汰了吗?我一直很讨厌 IndexedDB(甚至联系过 W3C)。 - user1873073
1
我不知道你是否考虑授予我赏金?希望的,可爱的微笑 - SashaZd
@SashaZd,当你说“SQLite数据库:: 50MB-80MB(取决于设备)”时,你是从哪里获取这些信息的? - Paranoid Android
@Mirko:iOS将SQLite限制在50MB以内。但是在Android中,我没有找到任何这样的限制。我在写这篇文章时查阅了一些资料,发现有一个博客说限制是80MB。如果我找到了这篇文章,我会发布它。 - SashaZd
@SashaZd 谢谢,看起来周围没有太多的文档。 - Paranoid Android
显示剩余5条评论

6

我曾在一台运行Android 4.0.4的平板电脑上进行测试。它使用了WebSQL(一个旧版本的WebSQL甚至不支持db.changeVersion),并允许我填满整个硬盘(12GB,我的数据库大小)。我不知道其他设备或SD卡的工作原理。

enter image description here


你是怎么做到的?你指定了配额限制的一些参数吗? - WJA

3

IndexedDB -

  • 它与许多类型的移动操作系统和版本不兼容
  • 它只能与非常特定版本的移动操作系统兼容
  • 开发人员无法在IndexedDB中使用SQL。 SQL语句可以用于SQLite和WebSQL
  • 大多数开发人员尽可能避免使用IndexedDB

WebSQL -

  • 它已被W3C弃用,这意味着它不再得到维护或开发
  • 它需要另一个名为Polyfill的插件才能使移动应用程序与流行的移动操作系统(如Google Android和Apple iOS)兼容

SQLite -

  • 它获得了Google的奖项
  • SQLite有其官方网站,而IndexedDB和WebSQL没有
  • 在Google上,SQLite返回1.8百万个结果。 WebSQL返回不到70万个结果,而IndexedDB返回282K个结果。
  • 开发人员可以使用常见的SQL语句来操作SQLite。

如果您想快速了解SQLite,请参阅以下教程:

使用Android和Phonegap存储SQLite数据库


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接