Java 将WriteConcern分配给mongo文件系统

Java 将WriteConcern分配给mongo文件系统,java,mongodb,gridfs,Java,Mongodb,Gridfs,各位同事:, 我使用的是v2.2版的Mongo和java Mongo驱动程序2.9.0 一些业务逻辑创建大约25个线程,每个线程在GridFS上创建150个文件。大约每1000个文件中有20个返回不正确getId(),因此结果为空。我认为(如果我错了,请纠正我),从吞吐量的角度来看,这是正确的行为。但是我真的需要这个id。对于常规的DBCollection,我会将WriteConcern.FSYNC\u设置为SAFE,但我看不出GridFS是否存在方法setWriteConcern。您知道如何强

各位同事:, 我使用的是v2.2版的Mongo和java Mongo驱动程序2.9.0


一些业务逻辑创建大约25个线程,每个线程在GridFS上创建150个文件。大约每1000个文件中有20个返回不正确
getId()
,因此结果为空。我认为(如果我错了,请纠正我),从吞吐量的角度来看,这是正确的行为。但是我真的需要这个id。对于常规的DBCollection,我会将
WriteConcern.FSYNC\u设置为SAFE
,但我看不出GridFS是否存在方法
setWriteConcern
。您知道如何强制刷新文件吗?

查看GridFS.java中的驱动程序代码:

_filesCollection = _db.getCollection( _bucketName + ".files" );
我可以在创建GridFS后解析同名集合,因此我的设置为write concern的代码如下所示:

_fs = new GridFS(_db, "MyBucketName");
DBCollection col = _db.getCollection( "MyBucketName" + ".files" );
col.setWriteConcern(WriteConcern.SAFE);

启动测试后,我可以看到所有文件都已成功返回正确的id。

为什么不设置常规安全写入问题?我认为这里不需要FSYNC_安全。@AsyaKamsky-这一点很好,但这并不能改变问题的本质。这是为了迫使大多数人或w=N在gridfs上写关注点,因为它看起来有点黑客行为吗?@simbo1905这不是黑客行为-因为所有的方法都是公开的。10gen开发者方面刚刚错过的是一个呈现GridFS集合名称的方法。但这个名称并不是秘密(甚至是更改的主题)——您可以从数据库控制台中探索它。