mongodb同步请求

我完全是新的node.js和mongodb,我有一个关于在同一时间期间发生的多个请求的同步的问题。 我已经阅读了关于这个主题的一些线索,但是我还没有find一个满意的答案呢。

我有以下情况:

我的集合中的文档具有状态属性。 在请求我select基于状态的文档,然后更新状态。

现在的问题是,如果有多个请求在同一时间所有请求将select相同的文档,因为第一个更新还没有写入数据库,但每个请求应该得到一个“自己的文档”来处理。

在这个需求中使用node.js和mongodb是否是一个好主意,还是应该坚持RDBMS的“经典”方法?

我的主要焦点是可伸缩性,这就是为什么我首先select了node.js和mongodb的原因。

我非常感谢你能给我的每一个build议,最好的问候

您可以在客户端(单例控制器等)中完全build立此并发访问模式或使用一些MongoDBfunction。 要在数据库中对其进行build模,请考虑如下所示的文档结构(在mongo shell中完成的示例):

{ "_id" : 1, "type" : "bathroom", "occupied" : false } 

当线程65需要使用浴室时,它发出一个findAndModify查询,并将浴室标记为已被占用:

 > var thread65_wc = db.restrooms.findAndModify( { "query" : { "type" : "bathroom", "occupied" : false }, "update" : { "$set" : { "occupied" : true } } }) 

findAndModify是primefaces的。 它将检索文档并设置occupied : true而不会有另一个线程尝试使用相同的浴室,或者一旦thread65开始查看它(假设检查是否occupied其他线程occupied ),就修改它。 现在螺纹65可以使用卫生间,一旦完成,它腾空它,并可能改变其他属性:

 > db.restrooms.update({ "_id" : thread65_wc._id }, { "$set" : { "occupied" : false, "dirty" : "very" } } ) 

使用findAndModify和一个occupied标志,你可以确保每个线程获得一个文档,并且在原始线程使用它的时候,这个文档不会被另一个线程所触及。