我正在写一篇有关Web应用程序离线功能的论文。我的任务是展示通过具有服务器端关系数据库的Web应用程序以及客户端与服务器之间的Ajax/JSON流量进行脱机存储的可能性。我的第一个实现使用了localStorage方法,将每个Ajax响应保存为值,并以请求URL作为键。该应用程序运行正常。但是,在下一步中,我想(即论文要求)使用客户端数据库实现更高级的版本。由于服务器维护关系数据库,因此Web SQL数据库将是直观的选择。但是,正如我们所知,该标准已过时,我不想使用 future 不确定的技术。因此,我想使用IndexedDB来实现客户端数据库逻辑。不幸的是,在阅读了很多网上的 Material 后,这些 Material 几乎总是爬取表面(待办事项笔记应用程序等),我仍然不知道如何进行。
我的任务似乎很简单:使用IndexedDB在客户端上实现服务器端数据库,以复制曾经从服务器获取的所有数据。这些使事情变得不那么直接的问题是:
{ "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 */
}}
{ "course": { /* course object */
"id":1,
"lecturer":
{ "reference": { /* reference to the lecturer in the object store 'lecturer' */
"objectstore":"lecturer",
"id":"1" }
},
"semester":
{ "reference": { /* reference to the semester in the object store 'semester' */
"objectstore":"semester",
"id":"1" }
}
/* more references and attributes */
}}
Retrieve the course object with id=1 from the object store 'course'
For each reference object in the retrieved course object, do
Retrieve the object with id=reference.id from the object store reference.objectstore
Replace the reference object with the retrieved object
最佳答案
我本人对IndexedDB还是陌生的,但是我也一直在思考如何将IndexedDB用于这样的目的。我建议的第一件事是,如果您还没有做的话,那就看看其他键值/文档数据库(CouchDB,MongoDB等)如何工作,因为这实际上就是IndexedDB的数据库类型。
处理文档数据库中的关系有几种不同的方法...要与关系型服务器端数据库进行同步,您可能需要创建某种自定义映射,因为某些关系方法对IndexedDB有意义不会非常清晰地映射到关系数据库。但是,我认为设置这样的映射肯定是可行的,而更大的问题是如何处理IndexedDB中的关系,因此我将在这里重点介绍...
至于您提出的解决方案,我认为它实际上可以很好地工作,并且您可以编写一个简单的查询库来帮助整合管道代码(更多内容请参见下文)。键值存储的构建非常有效,可以按键查找项目,因此对每个相关对象执行此操作可能不会像您认为的那样效率低下……但是,我提出了另一个更好地利用索引的想法。 ..
首先,对于我提出的解决方案,您需要将“对象存储”元数据存储在“引用”对象本身之外的其他位置……根本不需要甚至将其存储在IndexedDB中。您可以为此使用内存模式:
var schema = {
Course: {
fields: [id, title],
relationships: {
lecturers: {objectstore: 'lecturer'},
semester: {objectstore: 'semester'},
}
},
Lecturer: { ... }
...
};
var course1 = {
id:'C1',
lecturers:['L1'],
semester:1
};
var lecturer1 = {
id:'L1',
courses:['C1']
}
var semester1 = {
id:'S1',
courses:['C1']
}
lecturerStore.index("courses").get("C1").onsuccess = …
coursesStore.index("semester").get("S1").onsuccess = …
//select all courses taught by 'Professor Wilkins'
{
from: 'lecturer', //open cursor on lecturer store
where: function(lecturer) { return lecturer.name=='Professor Wilkins' }, //evaluate for each item found
select: function(lecturer) { return lecturer.courses }, //what to return from previous step
//this should be inferred in this case, but just to make it clear...
eagerFetch: function(lecturer) { return lecturer.courses }
}
关于javascript - IndexedDB的概念性问题(关系等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8694941/
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下
首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有, 也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手