我在Linux 64位盒子上运行了一个用于rails 3 app(使用mongoid适配器)的MongoDB。我正在批量上传150万条记录,总计大约2GB的数据。我正在使用我编写的脚本通过对我的应用程序的休息调用来加载数据(从输入文件中检索单个记录并一次一个地插入到MongoDB中)。如果我单独留下一切并且不查询数据库,这将正常工作。
但是,在一个加载过程中,我通过我的应用程序查询了数据库,并尝试检索到目前为止MongoDB中的所有记录(当时大约700,000个)。这导致我的加载脚本超时。
问题是,在尝试插入数据时,MongoDB的全局锁是否有可能在查询期间停止整个数据库,从而导致加载脚本超时?我只需要知道它是否可行。我认为全局锁定对于读/写是不同的。
我知道每个系统和配置的确切时间可能不同,但我正在尝试查看这是否可行,以便我可以为将来做好相应的准备。
答案 0 :(得分:0)
与大多数系统一样,写锁定优先于读锁定。
使用全局锁定,您可能有一位作家或许多读者
如果您的写锁定处于活动状态,则读锁定将排队。
您的磁盘在系统下面是什么样的?这也可能有助于读取和写入的性能备份,这会加剧锁定。
答案 1 :(得分:-1)
首先,如果您想要一些批处理来加载所有数据,您可以定义与其余操作不同的mongo连接。 因此,您的应用程序可以具有多个具有不同超时定义的Mongo对象。 在Mongo 2.0中,他们改进了锁定,并将在mongo2.2中进行改进 但这总是一般的问题,你想要一些读取操作非常快,一些其他读取速度较慢,而写入你可以有不同的延迟定义。