问题:
我需要一个设备不可知(例如HTML5)解决方案,用于在手机或平板电脑类型设备(例如iOS/Android)上离线存储和查询250,000多行数据.我的想法是让人们在没有任何蜂窝数据连接的偏远地区工作,他们需要对这些数据运行查询并在离线时进行编辑.部分地,它将基于地理位置,因此如果他们所在的区域中有资产(使用GPS),那么它将显示这些资产并让它们被编辑.当他们返回办公室时,他们可以将数据同步回办公室服务器.
我从Web标准的角度来看这个问题的原因基本上是通过在HTML5中编写一次来节省金钱和时间,然后它可以跨多个平台工作,而不是在Objective C和Java中编写两次.此外,如果你写的是平台不可知的东西,那么你就不会被锁定,并且当每个人都搬到新的船上时,不要随船离开.我们有一个类似的应用程序为Windows Mobile 5编写,现在它没用,因为该平台已经死了.
设备上的脱机数据库需要是:
选项:
HTML5本地存储:
对于少量数据<5,000键/值,如果将其转换为JSON,甚至可以在其中存储数组/对象.
缺点:
Web SQL数据库:
缺点:
IndexedDB的:
键/值对象存储类似于本地存储,除了索引.
缺点:
这留下了实现已弃用的Web SQL方法的唯一选择,该方法可能仅工作一年左右.IndexedDB和本地存储目前无法使用.
我不确定Mozilla和Microsoft如何推荐Web SQL数据库标准,以及为什么W3C会让它发生.据称他们之间拥有77%的桌面浏览器市场.在先进的移动设备上,Mozilla和微软几乎没有影响力,因为Safari,Opera和Android拥有超过90%的市场份额.Mozilla和微软如何决定在最有可能使用离线存储的移动市场中应该使用哪种标准没有任何意义.
在Mozilla的评论中,为什么他们想要使用IndexedDB而不是主要关注"开发者美学",他们不喜欢在JavaScript中运行SQL的想法.我不是买它.
目前提出的标准较差,并且是一种非常基本的NoSQL实现,速度很慢,甚至不支持数据库中人们需要的高级功能.有许多样板代码来建立数据库并获取数据,但是他们声称人们会在其顶部编写一些很好的抽象库,它们将提供更高级的功能.截至2011年10月,他们无处可见.
他们已经弃用了现有的Web SQL标准,该标准实际上可以在主要的移动设备/平板电脑浏览器中实现.虽然主流移动浏览器无法提供"新"和"更好"的标准.
我们作为开发人员应该在未来3 - 5年内使用什么,这时IndexedDB规范可能会变得标准化,具有更多功能,在主要的移动/平板电脑浏览器中实现,还有一些很好的库可以让事情变得更容易?
W3C应该保持Web SQL数据库标准并行运行,并解决问题.它已经支持主要的移动平台,并且运行良好.事实上,Mozilla和微软作为拥有最多桌面浏览器份额的两家公司能够取消这一标准是非常可疑的,可能会被视为阻碍移动网络平台进展的尝试,直到他们能够赶上并提供针对iOS/Safari和Android的竞争解决方案.
总之,任何人都有我的问题的解决方案,适用于手机/平板电脑设备的iOS/Android.也许是一个很好的包装器API,它可以在后台使用多个数据库实现并具有查询功能,它允许您选择哪个数据库具有优先级.我已经看过像草坪椅这样的东西,但我很确定它只允许你默认使用本地存储,然后再回到其他存储.我想我宁愿使用Web SQL(默认情况下),然后使用较慢的选项.
对解决方案的任何帮助都非常感谢,谢谢!
当我的应用程序在手机上本地存储数据时,该存储有多长久?我会详细说明具体情况:
我正在使用jQueryMobile和Phonegap构建一个应用程序.它本质上是一个浏览器应用程序,但使用Phonegap让我打包并在应用程序商店中出售,以及其他优点.
Phonegap提供两种存储方式,这两种方式都可以协调iO,Android,Blackberry和其他一些操作系统的本机功能:localStorage(原始键值对)和Web SQL数据库.localStorage和Web SQL都是属于浏览器的存储形式.话虽如此,我无法确定数据将保存多长时间,在什么情况下会被删除,在什么情况下可能无法使用等等.
例如,如果应用程序使用localStorage或Web SQL存储数据,并且用户在其Android上切换到不同的标准浏览器,那么是否可以使用新浏览器打开应用程序,这是否意味着存储的数据不可用?
如果用户一年没有使用该应用程序(在我的情况下是一个现实的,不一定是坏的情况),数据是否会像cookie一样过期,或者可能被大量的数据库推出浏览器的存储空间来自其他应用的数据?
或者甚至更早地销毁数据,例如: - 用户访问浏览器中的另一个站点 - 手动关闭浏览器 - 浏览器进程被终止或死亡 - 等等
或者localStorage和web SQL是您在(在Android中)转到设置>应用程序并主动删除与应用程序关联的用户数据时仅删除的存储类型?
感谢您的任何见解.在'WWW'上没有任何信息.
在应用更新的情况下会发生什么.本地和网络存储将被删除或将保留?
我是Web SQL数据库的新手,我用它来将数据保存在网页的本地数据库中.
我可以创建一个数据库,由
var db = openDatabase('database', '1.0', 'my database', 2 * 1024 * 1024);
Run Code Online (Sandbox Code Playgroud)
我可以通过这样做来创建一个表
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS mytable (blah,blah)');
});
Run Code Online (Sandbox Code Playgroud)
我可以删除该表通过
db.transaction(function (tx) {
tx.executeSql('DROP TABLE mytable');
});
Run Code Online (Sandbox Code Playgroud)
但有没有办法以database编程方式删除?
javascript sql google-chrome google-chrome-extension web-sql
我正在开始开发具有脱机数据库存储要求的Web应用程序.长话短说,应用程序应该可以运行:
那么问题是选择哪种技术:IndexedDB或Web SQL数据库?
关于Web SQL数据库,一方面可以在任何上述场景中使用它.另一方面,Mozilla表示Firefox永远不会实现它,根据HTML5 工作草案,规范已经陷入僵局:
这个规范已陷入僵局:所有感兴趣的实现者都使用了相同的SQL后端(Sqlite),但我们需要多个独立的实现来继续标准化路径.在另一个实现者对实现此规范感兴趣之前,SQL方言的描述仅仅是对Sqlite的引用,这对于标准是不可接受的.如果您是一个对实现独立SQL后端感兴趣的实现者,请联系编辑器,以便他可以为方言编写规范,从而允许此规范继续前进.
IndexedDB是Mozilla提倡的替代品,但它只会出现在Firefox 4中.微软很感兴趣,Chrome也会支持它.我对Apple的IndexedDB计划一无所知.
我个人倾向于选择Web SQL数据库,但仅仅因为我习惯了SQLite,我喜欢SQL的强大和表现力,而且我理解关系模型.对我来说,IndexedDB是一种不确定性.
那就是说,我害怕赌错马.假设支持Web SQL数据库将继续存在,即使IndexedDB成为标准,是否安全?
(关于CouchDB的说明:您是否也将其视为替代方案?)
我正在写一篇关于Web应用程序离线功能的论文.我的任务是通过Web应用程序显示离线存储的可能性,该应用程序具有服务器端关系数据库和客户端与服务器之间的Ajax/JSON流量.我的第一个实现使用了localStorage的方法,将每个Ajax响应保存为值,并将请求URL作为键.该应用程序工作正常.然而,在下一步中,我希望(即论文要求)使用客户端数据库实现更高级的版本.由于服务器维护关系数据库,因此Web SQL数据库将是直观的选择.但是,正如我们所知,该标准已被弃用,我不想使用未来不确定的技术.因此,我想使用IndexedDB来实现客户端数据库逻辑.不幸的是,在网上阅读了大量材料后,我们仍然不知道该如何处理.
我的任务似乎相当简单: 使用IndexedDB在客户端上实现服务器端数据库,以复制曾经从服务器获取的所有数据.这些问题远远不那么简单:
现在,我有一个概念,我真的害怕开始实施.我考虑过为服务器数据库中的每个表创建一个对象存储,并手动编写不同对象存储中的关系对象.在我的应用程序中,简而言之,管理大学的课程,我有7个对象商店.
我想通过服务器的JSON响应示例演示我的想法(/*这些是注释*/):
{ "course": { /* course object */
"id":1,
"lecturer": { "id":"1", /* lecturer object with many attributes */ },
"semester": { "id":"1", /* semester object with many attributes */ },
/* more references and attributes */
}}
Run Code Online (Sandbox Code Playgroud)
使用IndexedDB存储数据的算法会将应用于对象存储的每个对象存储在适当的对象存储中,并使用对这些对象的引用替换对象.例如,上面的课程对象在对象库"课程"中看起来如下:
{ "course": { /* course object */
"id":1,
"lecturer":
{ "reference": { /* reference to the lecturer in the object store 'lecturer' */
"objectstore":"lecturer",
"id":"1" }
},
"semester":
{ "reference": { …Run Code Online (Sandbox Code Playgroud) 这些概念之间有什么区别,我应该何时特别使用?此列表是否也包含相同一般概念的不同名称?
我是web开发人员,以phonegap开头.我需要为iPhone,Android和Windows Phone 8创建一个应用程序.
我需要在本地存储一些数据(对于localStorage来说太大).
我不知道女士解决方案是最好的:
有人之前创建过这样的应用吗?我会很高兴任何解决方案或想法.
我很好奇是否有一个库或项目为IndexedDB或WebSQL提供通用接口,具体取决于用户的浏览器支持.如果他们使用Chrome/Safari,请使用WebSQL,如果他们使用的是Firefox或Internet Explorer,请使用IndexedDB.
这个问题的海报似乎有自己开发的解决方案,但没有提供任何源代码.
我想从WebSql更改为Indexeddb.但是,如何进行SQL查询
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com'
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and age = 30
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and name = 'Bill'
etc
Run Code Online (Sandbox Code Playgroud)
使用IndexedDB?例如,我在阅读indexedDb 的文档时注意到,所有示例当时只查询一个索引.所以你可以做到
var index = objectStore.index("ssn");
index.get("444-44-4444").onsuccess = function(event) {
alert("Name is " + event.target.result.name);
};
Run Code Online (Sandbox Code Playgroud)
但我需要同时查询多个索引!
我还发现了一些关于复合索引的有趣帖子,但它们只有在查询复合索引中的所有字段时才有效.
可查询的客户端数据存储有哪些解决方案?这将用作临时缓存,以执行基本操作,例如在客户端中对用户选择的日期范围进行排序和聚合
我找到了一些很有希望的候选人,但我不确定最好的选择是什么
还有一些其他不太理想的选择:
我很想知道你对这些选项的体验/如果还有其他我错过了