【问题标题】:HTML5 Web SQL Database ConcernsHTML5 Web SQL 数据库问题
【发布时间】:2012-12-05 16:18:07
【问题描述】:

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

问题是我们的用户需要能够离线使用我们的应用程序,在将数据“同步”到我们的服务器之前,他们可以存储多长时间或多少数据没有真正的限制。 p>

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

我知道有几个插件可以让您使用 sqlite 数据。 原始的 sqlite 插件 (https://github.com/davibe/Phonegap-SQLitePlugin) 缺少用于android,而另一个(https://github.com/chbrody/Cordova-SQLitePlugin)要求我指定一个显然不可能的数据限制。因此,我只剩下很少的选择,一种是将数据库拆分为多个 5MB 的段,这些段由 JS 包装器控制。

您能否将较大的数据结构拆分为多个 5MB 的 websql 数据库,并且在 iOS 和 Android 上都没有问题?

iOS和安卓的websql数据库总数有限制吗?

您还有其他选择可以推荐我们吗?我们需要能够将我们现有的 HTML5 和 CSS 用于前端!

编辑

我们最初的架构从未真正适用于平板设备。这是我们希望通过cordova 来解决的问题,并构建一个更稳定的解决方案。最初,我们的离线产品在 Server2Go 堆栈上运行,由于客户端计算机上运行的各种应用程序存在各种平台问题

【问题讨论】:

  • 你是如何在原来的浏览器应用中解决这个问题的?
  • 在原始浏览器应用程序中,我们使用 Server2Go 堆栈在他们的机器上实际“托管”应用程序 (server2go-web.de)。这导致了各种各样的问题(主要是在本地运行 mysql。WAMP 不是为生产而设计的,Apache/MySQL、PHP 也不是为在不断更改其配置的平台上运行而设计的,因为我们无法控制客户端的软件选择安装可能与此堆栈冲突的),这也是我们切换架构的原因之一。
  • IndexedDB 怎么样。它没有限制。

标签: android ios cordova web-sql


【解决方案1】:

对于android平台,你可以创建一个native app,然后使用webview显示前端(如果保持HTML真的那么重要),然后使用javascript桥允许WebView中的内容与您的原生应用交互。

根据您对该应用程序的描述,我认为您最好实际创建一个本机应用程序。正如您在评论中所说,您切换平台的原因之一是缺乏控制。为什么然后通过将各种混合应用程序框架引入您的堆栈来立即重新打开这个蠕虫罐。

长话短说,如果您只采用原生方法,您将拥有完全的控制权(并且很有可能获得更好的产品)。

【讨论】:

  • 这是我目前正在研究的东西。利益相关者希望能够尽可能重用现有的 HTML/CSS,并且我们所有的开发人员都熟悉 Javascript。我们的整个新平台都运行 javascript(前端为 AngularJS,后端为 NodeJS),所以如果我们能找到一个使用 JavaScript 而不是 Objective-C 或 Java 的解决方案,那就太好了。
  • 我听到了,这是移动开发中非常常见的场景。商业赞助商不想在移植现有代码时投入资源,但最终花费几乎同样多的资源创建一个邪恶的storm-p型机器以使其与“我们拥有的”一起工作(+天知道有多少鸭带:(祝项目好运,希望它不会太痛苦。
  • 真的,这里唯一的问题是苹果。他们严格的 QA 工作造成了各种(看起来像是)不必要的技术挑战。 Android 很简单,但由于 Apple 占据了桌面市场的大部分份额,而且我们的客户显然希望使用平板电脑,因此我们必须符合他们(荒谬?)的规范。
  • 但混合应用程序很可能会通过完全相同的 QA 流程? stackoverflow.com/questions/12068192/…
  • 好吧,我不知道你想要什么你实际上在寻找伴侣(我以为你在探索 phonegap sqlite 插件作为潜在的解决方案,这些是混合应用程序):D 我在 5 分钟内开会.祝您找到适合您和您的团队的解决方案 :)
【解决方案2】:

要获得真正的跨平台、跨浏览器的关系解决方案,可以离线工作并具有必要的存储容量,我建议使用:SequelSphere

由于它是 100% JavaScript 解决方案,因此它应该可以在您的每种配置中使用,而无需为每种配置使用不同的代码库。此外,它使用 IndexedDB(如果可用,然后是 LocalStorage)将其数据存储在关系表中。我相信大多数浏览器对 IndexedDB 的存储量没有大小限制。我认为 Firefox 可能有以下 50MB 的初始限制:Max size in IndexedDB

此外,还有一个名为“更改跟踪器”的新功能,它通过跟踪表的更改(插入/更新/删除)并在您需要时向您报告,从而显着帮助数据同步过程。

作为一个额外的好处,与 WebSQL 不同,SequelSphere 对 JSON 非常友好。创建表格再简单不过了:

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 支持。

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

【讨论】:

  • 看起来不错,但我在网站上的任何地方都找不到费用。只是一个要求价格的表格。不理想...
【解决方案3】:

一般来说,我建议使用草坪椅,这样您就可以与实施无关。 http://brian.io/lawnchair/adapters/

您能否将较大的数据结构拆分为多个 5MB 的 websql 跨 iOS 和 Android 的数据库都没有问题?

在我知道草坪椅之前,我实现了this using WebSQL,我有点后悔。 WebSQL 数据库可以增长到超过 5MB。我不确定真正的最大值是多少,但我已将 Phonegap 应用设置为 100 * 1024 * 1024,并且在 Honeycomb Android 上没有任何问题。

对于 iOS,您可以使用 SQLite database on PhoneGap / iOS - More than 5mb possible

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-06-21
  • 2016-03-31
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 2011-04-27
  • 1970-01-01
相关资源
最近更新 更多