Node.js,MongoDB和并发

我正在研究一个游戏原型,并担心以下情况:浏览器将AJAX添加到Node.JS,它必须使用async.series执行多个MongoDB操作。

什么可以防止多个请求同时导致数据库问题? 新的事件(即数据库操作)看起来像他们可能会不按顺序或在asynchronous系列步骤之间运行。

换句话说,如果用户在完成他们的async.series之前很快地调用AJAX,会发生什么。 希望这是有道理的。

如果这确实是一个问题,那么处理这个问题的正确方法是什么?

首先,应该完全忽略@ fmodos的评论。 这在许多层面上都是错误的,但是最简单的,你可以有任意数量的节点运行(比如在Heroku上 ),并且不能保证随后的请求会碰到同一个节点。

现在,我要回答你的问题,提出更多的问题。 (你真的没有在这里给我一个select)

这些操作在做什么? 插入文件? 更新现有的文件? 删除文件? 这是非常重要的,因为如果你所做的只是简单地插入文件,那么如果一个文件在另一个文件之前完成,那么为什么这么做呢? 如果你正在更新文档,那么你不应该发布一个查找,抓取对象的引用,然后调用保存。 (我假设你正在使用mongoose,如果你不是,我会)而不是你应该做的是使用内置的mongo函数,如$inc ,它可以正确处理并发请求。

http://docs.mongodb.org/manual/reference/operator/update/inc/

这些帮助有用? 如果没有,请让我知道,我会再试一次。

Mongo具有数据库宽读/写锁 。 它优先写入相同的集合,然后完成读取。 所以,如果碰巧Bill有写给DB的信息,而Joe正在阅读,Bill的写信将会先执行,而Joe等待写信完成,然后给他所有的数据(包括Bill的数据)。