Meteor:如果在服务器上使用慢速硬盘,应用程序将重置表单输入

时间:2015-08-27 18:57:53

标签: mongodb meteor hard-drive

如果表单输入发生更改,客户端将更新文档,随后将更改的文档写入MongoDB。保存文档不需要进一步提交或保存,这是理想的行为。

如果服务器硬盘足够快,则按预期工作。但是如果硬盘阻塞几秒钟,输入字段将被重置并且键入的字母将丢失。现在我想了解并解决这个问题,因为它永远不会发生 - 甚至不是每周一次 - 输入的字母会丢失(除了浏览器或服务器崩溃)。

我需要改变什么?

我发送每个按键。我应该缓冲几个按键并将它们发送到一个块中吗? Meteor中是否存在内置缓冲解决方案?

硬盘的块是否超过MongoDB或Meteor中的超时并丢弃更改?我在哪里可以找到超时并更改它?

还有什么原因?

1 个答案:

答案 0 :(得分:2)

为避免这种情况,您只能在客户端的MiniMongo中存储活动表单数据,并将Session变量与您正在使用的文档的_id保持一致。确定何时应根据应用程序要求保存到服务器,并在此时调用方法以使用客户端的minimongo数据更新服务器集合。使用此模型,您的客户的集合全部都在内存中。

因此,在客户端上,您的更新事件将如下所示:

'keyup input#myinput':function(e){
var modifier = {$set: {'mydata': e.currentTarget.value}};
LocalCollection.update({Session.get('documentId')},modifier);
}

并且您的保存事件将如下所示:

'click btn#save':function(e){
var id= Session.get('documentId');
ServerCollection.upsert({_id: id,LocalCollection.findOne(id)});
}

您可以对其进行扩展以设置保存计时器,或根据许多编辑进行保存。您何时以及如何保存到服务器取决于您,但如果您有大量快速更改,请将其保留在客户端内存中,直到您准备好提交大量新数据为止。