MongoDB全局锁:同时读取和插入大量数据



我有一个MongoDB在Linux 64位盒子上为rails 3应用程序运行(使用mongoid适配器)。我正在批量上传150万条记录,总计约2GB的数据。我使用我编写的脚本(从输入文件中检索一条单独的记录,并一次一条地将其插入MongoDB),通过对应用程序的rest调用加载数据。如果我把一切都放在一边,不查询数据库,这将很好。

然而,在一个加载过程中,我通过我的应用程序查询了数据库,并试图在MongoDB中检索到迄今为止的所有记录(当时约为700000条)。这导致我的加载脚本超时。

问题是,MongoDB的全局锁是否有可能在查询期间暂停整个数据库,同时尝试插入数据,导致加载脚本超时?我只是想知道这是否可能。我认为全局锁对于读/写是不同的。

我知道每个系统和配置的确切时间可能不同,但我正在努力看看这是否可行,以便为未来做好相应的准备。

与大多数系统一样,写锁优先于读锁。

使用全局锁,您可能有一个写入程序多个读取器

如果有一个写锁处于活动状态,则读锁将排队。

您的磁盘在系统下面是什么样子的?这也可能导致读取和写入的性能备份,从而加剧锁定。

首先,如果你想有一些批处理来加载所有数据,你可以定义与其他操作不同的mongo连接。因此,您的应用程序可以有几个具有不同超时定义的Mongo对象。在Mongo 2.0中,他们改进了锁定,并将在mongo2.2中进行改进但这总是一个普遍的问题,你希望一些读取操作非常快,另一些读取操作较慢,对于写入,你可以有不同的延迟定义。

相关内容

  • 没有找到相关文章

最新更新