2012-04-02 41 views
2

我在Linux 64位机器上运行一个用于rails 3应用程序(使用mongoid适配器)的MongoDB。我正在进行150万条记录的批量上传,总计大约2GB的数据。我正在使用我编写的脚本(通过输入文件检索单个记录并一次将其插入到MongoDB中)加载数据。如果我放下所有东西并且不查询数据库,这将工作得很好。MongoDB全局锁定:同时读取和插入大量数据

但是,在一个加载过程中,我通过我的应用程序查询了数据库,并尝试检索MongoDB中迄今为止所有的记录(当时大约为700,000)。这导致我的加载脚本超时。

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

我知道每个系统和配置的确切时间可能不同,但我试图看看这是否可行,所以我可以为未来作相应的准备。

回答

0

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

随着全球锁,你可以有一个作家许多读者

如果你有一个写锁活跃,读锁会排队。

你的磁盘在系统下面看起来像什么?这也可能有助于读写的性能备份,这会加剧锁定。

-1

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