【问题标题】:Assign WriteConcern to mongo file system将 WriteConcern 分配给 mongo 文件系统
【发布时间】:2012-10-12 14:56:00
【问题描述】:

同事们, 我正在使用 v2.2 的 Mongo 和 java Mongo 驱动程序 2.9.0,

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

【问题讨论】:

  • 为什么不设置常规的 SAFE 写入关注点?我认为您在这里不需要 FSYNC_SAFE。
  • @AsyaKamsky - 好点,但它不会改变问题

标签: java mongodb gridfs


【解决方案1】:

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

_filesCollection = _db.getCollection( _bucketName + ".files" );

我可以在创建 GridFS 后解析具有相同名称的集合,因此我设置写关注的代码如下所示:

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

开始测试后,我可以看到所有文件都成功返回了正确的 id。

【讨论】:

  • 这是为了在 gridfs 上强制多数或 w=N 写入关注点而做的适当的事情,因为它看起来有点 hacky?
  • @simbo1905 这不是 hack - 因为那里的所有方法都是公开的。 10gen 开发人员方面刚刚错过的是一种呈现 GridFS 集合名称的方法。但是这个名字不是秘密(甚至是变化的主题)——你可以从数据库控制台探索它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 2022-11-04
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 2022-07-25
相关资源
最近更新 更多