2017-04-06 145 views
0

我的应用程序需要访问一个Mongo数据库,如果多个进程/线程正在从一个特定的集合中读取数据,就会发生不好的事情。如何在MongoDB上放置读锁定?

我需要限制一组进程从集合(或db,如果需要的话)读取的能力。例如,如果有多个进程试图从db中读取,它们将按顺序读取,并行地读取而不是

+0

如果从一个集合中读取多个进程,会发生不好的事情?这听起来像是一种不寻常的情况,你能告诉我们更多吗? –

+0

@VinceBowdren是的。集合中的文档确定要放入集合中的下一个文档。集合中不得有重复项。因此,如果两个进程同时从集合中读取数据,他们可以读取相同的数据,计算相同的下一个文档,然后写入相同的文档,这对我的算法不利。 – user3919624

回答

1

这可以在驱动程序级别完成。如果将连接池大小设置为1,则对数据库的所有访问都将按顺序进行。

在你的NodeJS可以设置驱动程序:

MongoClient.connect(url, { 
    poolSize: 1 
}); 

从文档:

poolSize,这可以让你控制多少TCP连接 并行打开。默认值为5,但您可以根据需要将其设置为 。驱动程序将使用循环策略来调度 并从tcp连接中读取。

+0

即使多个'MongoClient'实例在不同的进程中启动,这是否也能工作?例如,如果两个进程都运行'MongoClient.connect(url,{poolSize:1});',数据库是否仍然接受来自TWO进程的连接? @kozakvoj – user3919624

+0

不,但如果您确实需要顺序访问数据库(并且@VinceBowdren提到的情况非常特殊),则可以使用消息队列。您的线程可以将数据库读取委托给队列,当队列完成时(异步地)将会通知他们。 – kozakvoj