问题:
我需要一个设备不可知(例如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(默认情况下),然后使用较慢的选项.
对解决方案的任何帮助都非常感谢,谢谢!
我们的项目目前使用Silverlight来使用Odata服务.这使得生活变得非常简单,因为我们可以引用OData服务,从而为我们提供生成的服务引用/实体.
但是,我们是否应该转向Html(html5)进行讨论.如果我们做出这个改变,我想知道会发生什么.我们当然会利用像jQuery这样的框架.
谢谢!
作为一名网络开发人员,我最近发现了与KnockoutJS合作的乐趣,但是当谈到使用服务器时,我几乎完全独立.我已经考虑过BreezeJS和JayData的CRUD功能和批处理操作,但我仍然不确定哪一个最适合我.
我现在专注于使用EF的ASP.NET MVC开发,但我可能稍后转向其他平台,因此我不希望局限于一个特定的框架.在这方面,JayData提供了许多BreezeJS的提供商,如OData,webSQL,IndexedDB,localStore,Facebook和YQL,这几乎是压倒性的.BreezeJS确实支持OData,但仅限于消费.
但是,我可能没有想到的易用性,文档和其他关键功能如何?
感谢您帮助我在他们之间做出选择.
我在Telerik Platform移动应用程序中使用JayData.JayData的优秀人才解决了我想要做的事情:
http://jsfiddle.net/JayData/zLV7L/
var savefeedIfNotExists = function (feed) {
//create jQuery promise
console.log("create deferred for " + feed.FeedID)
var def = new $.Deferred();
//async thread
pnrDB.PNRFeeds.filter('it.FeedId == ' + feed.FeedID).count(function (count) {
console.log("Add Feed - " + feed.FeedName);
if (count == 0) {
var f = new PNRFeed({
FeedId: feed.FeedID,
FeedName: feed.FeedName,
ImageName: feed.ImageName,
FeedActive: feed.IsActive,
OrderNumber: parseInt(feed.OrderNumber) + 1
})
pnrDB.PNRFeeds.add(f);
console.log("Resolve for - " + feed.FeedName);
//promise.resolve() indicates that all async operations have finished
//we add the ADD/SKIP …Run Code Online (Sandbox Code Playgroud) 好吧,标题有点拗口,但它说明了我在寻找什么.我有一个oData端点,我有兴趣看看是否有任何项目(最好是开源,可能基于datajs?)让我指向终点,它给了我一个网格,分页和我的最终用户能够进行动态查询(如,添加新的查询参数和刷新网格).
想看看它是否值得一试,看看是否有其他人在我自己走下去之前一直走在这条路上.
我想查询一个简单的sqLite数据库并获取所有值并将其打印在一个<div>.数据库表只有人"名称"和相应的"联系号码"作为列.请解释这样做的逻辑.
当我的应用程序第一次运行时使用 IndexedDB,我用一些数据填充它,我想确保在创建数据库和表时它们还不存在。
我可以在 JavaScript 中查询表的长度以查看它是否包含数据吗?
有没有办法使用Breeze创建类型化实体,就像JaySvcUtil为JayData工作一样?这是否包括Typescript支持 - 在Breeze框架中是否还有一般的Typescript支持?
我正在使用jaydata作为客户端和.net odata作为服务器,但是当我请求服务器时,它给出了501未实现的错误,当我搜索它时,问题是CORS [Cross Origion Resouse Sharing]有没有办法启用CORS在odata服务器或IIS ???
我的代码很简单,只需创建带有服务的上下文,并获取一个解决方案就是在web.config中放置specail config部分
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)
但这并没有解决问题

记住我使用odata [RESTFUL]服务和jaydata作为客户端