我必须在一个 MongoDB 集合中存储大约200GB的原始数据。哪个工作正常。插入所有对象后,我必须使用光标遍历整个集合并在每个对象上写入一些新字段。但是在某些时候会出现一个错误,说:
com.mongodb.MongoException:磁盘空间不足时无法获取写锁
com.mongodb.MongoException: Can't take a write lock while out of disk space
at com.mongodb.CommandResult.getException(CommandResult.java:100)
at com.mongodb.CommandResult.throwOnError(CommandResult.java:134)
at com.mongodb.DBTCPConnector._checkWriteError(DBTCPConnector.java:130)
at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:154)
at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:137)
at com.mongodb.DBApiLayer$MyCollection.update(DBApiLayer.java:353)
at com.mongodb.DBCollection.update(DBCollection.java:165)
at com.mongodb.DBCollection.save(DBCollection.java:771)
at com.asuum.products.mongodb.ProductDatabaseHandler.writeToProductsDB(ProductDatabaseHandler.java:98)
at com.asuum.products.images.ImageSizeCalculator.convertImages(ImageSizeCalculator.java:89)
at com.asuum.products.images.ImageSizeCalculator.main(ImageSizeCalculator.java:100)
我正在使用 Java 客户端,MongoDB 版本 2.4.6,我在具有 32 个内核、256GB RAM 和 1.5TB 磁盘空间的大型 64 位 Linux 服务器上运行它。
当我运行统计信息时,它告诉我:
{ "serverUsed" : "localhost/127.0.0.1:27017" ,
"ns" : "products.productCollection" ,
"count" : 2090339 ,
"size" : 2.6235131E9 ,
"avgObjSize" : 1255.0658529549514 ,
"storageSize" : 6.933086208E9 ,
"numExtents" : 25 ,
"nindexes" : 0 ,
"lastExtentSize" : 726470656 ,
"paddingFactor" : 1.9980000000199927 ,
"systemFlags" : 0 , "userFlags" : 0 ,
"totalIndexSize" : 0 , "indexSizes" : { } ,
"ok" : 1.0 }
所以我想有足够的磁盘空间......
我在程序启动时对集合运行 compact-command。我没有更改有关节点和副本集的默认配置中的任何内容。
可能是什么问题呢?