1

我必须在一个 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。我没有更改有关节点和副本集的默认配置中的任何内容。

可能是什么问题呢?

4

0 回答 0