HTML5 Web SQL数据库问题

我公司目前正在过渡到一个新的架构,以及为移动设备提供服务的模型。 我们的应用程序传统上是基于Web的( HTML5 / CSS3 / JS / PHP / MYSQL ),所以我们希望能够将其移植到移动平台上,而不必重新发明轮子( Cordova ),以及独立的桌面AppJS ),以便我们不必担心浏览器相关的错误。 我们也正在从PHP过渡到NodeJS ,使这更加可行。

问题是我们的用户需要离线使用我们的应用程序的能力,在将其“同步”到我们的服务器之前它们可以存储多长时间或多less数据没有实际的限制。

使用AppJS,这不是一个问题,因为它们可以在sqlite数据库中存储所需的数据。 不过,我已经发现了关于WebSQL数据和cordova / phonegap的5MB配额的问题。 这对我们的业务需求提出了明显的技术挑战。

我知道有几个插件可以让你使用sqlite数据。 最初的sqlite插件(https://github.com/davibe/Phonegap-SQLitePlugin)缺lessandroid的文档,另一个(https://github.com/chbrody/Cordova-SQLitePlugin)要求我指定一个数据限制显然是不可能的。 因此,我只剩下很less的select,一个是将数据库拆分成由JS包装器控制的多个5MB段。

你可以将大型的数据结构拆分成多个5MB的websql数据库吗?在iOS和Android上没有问题?

在iOS和Android上的websql数据库总数是否有限制?

有没有其他的select,你会build议我们看看? 我们需要能够使用我们现有的HTML5和CSS的前端!

编辑

我们原来的架构从来没有真正与平板设备。 这是我们正在寻求纠正与cordova,以及build立一个更稳定的解决scheme。 最初,我们的离线产品运行在Server2Go堆栈上,由于各种应用程序在客户端计算机上运行,​​存在各种平台问题

对于android平台,你可以创build一个本地的应用程序,然后使用webview来显示前端(如果它真的很重要,保持它的HTML),然后使用JavaScript桥梁,让WebView中的内容与您的原生应用程序

从你所描述的应用程序,虽然我认为你最好实际创build一个本地应用程序。 正如你在你的评论中所说的,你改变平台的原因之一是缺乏控制力。 为什么然后立即通过将各种混合应用程序框架引入您的堆栈来重新打开这个蠕虫的jar头。

长话短说,如果你只是采用本土的方式,你将拥有完全的控制权(很可能是更好的产品)。

为了获得真正的跨平台,跨浏览器的关系解决scheme,将离线工作,并具有必要的存储容量,我会build议与: SequelSphere

由于这是一个100%的JavaScript解决scheme,因此它应该可以在每个configuration中使用,而不需要每个configuration都有不同的代码库。 此外,它使用IndexedDB(如果可用,然后使用LocalStorage)将其数据存储在关系表中。 我相信大多数浏览器没有IndexedDB存储量的大小限制。 我认为Firefox可能会有以下最初的50MB限制: IndexedDB中的最大大小 。

此外,还有一项名为“更改跟踪器”的新function,通过跟踪表格的更改(插入/更新/删除),然后在需要时向您报告,可显着帮助数据同步过程。

作为额外的附加奖励,与WebSQL不同,SequelSphere是非常友好的JSON。 创build表格不是一件容易的事情:

db.catalog.createTable({ tableName: "EMPL", columns: [ "EMPL_ID", "NAME", "AGE", "DEPT_ID" ], primaryKey: [ "EMPL_ID" ], data: [ [0,"Bob",32,0], [1,"John",37,2], [2,"Fred",28,1] ] }); 

查询数据很简单:

 var res = db.query("SELECT name, age, dept_id FROM empl WHERE Dept_ID = 2"); 

插入/更新/删除数据很简单:

 db.insertRow("empl", [3, "Sue", 26, 2]); db.updateRow("empl", [3, "Suzy", 26, 2]); db.deleteRow("empl", [3, "Suzy", 26, 2]); 

有一件事要注意:因为这将用于离线应用程序,请确保将整个Catalog或每个Table的“Persistence Scope”设置为“SCOPE_LOCAL”:

 db.catalog.setPersistenceScope(db.SCOPE_LOCAL); // -or- db.catalog.getTable("empl").setPersistenceScope(db.SCOPE_LOCAL); 
  • 基础文档: SequelSphere基础知识
  • 有关“本地存储”支持的文档: 本地数据存储和持久性
  • 这里是API: SequelSphere API

如果您有任何问题,只需发送电子邮件支持SequelSphere。

为了完全透明,我是SequelSphere的一部分,它似乎很好地回答你的问题…;)

一般来说,我build议使用lawnchair,以便您可以执行不可知论。 http://brian.io/lawnchair/adapters/

你可以将大型的数据结构拆分成多个5MB的websql数据库吗?

在我知道关于lawnchair之前,我使用WebSQL来实现这一点 ,我有点后悔。 WebSQL数据库可以增长超过5MBs。 我不确定真正的最大值是多less,但是我已经将Phonegap应用程序设置为100 * 1024 * 1024,并且在Honeycomb Android上没有任何问题。

对于iOS,您可以在PhoneGap / iOS上使用SQLite数据库 – 超过5mb可能 。