【问题标题】:How do you diagnose write_concern problems in Mongo?您如何诊断 Mongo 中的 write_concern 问题?
【发布时间】:2015-04-13 21:07:05
【问题描述】:

我有一个带有辅助数据库的 Mongo 数据库 (v2.4.10),我正在向其中保存数据。有时,在保存新文档并尝试检索它之后,我会遇到找不到文档的异常,即使在手动检查时它就在那里。

这是一个最小的示例,但不幸的是,该问题并未始终如一地重现。我怀疑是由于在辅助服务器拥有数据副本之前尝试从数据库中读取而导致的问题?

from mongoengine import connect, Document

class User(Document):
    date_creation = DateTimeField(default=datetime.datetime.utcnow)
    username = StringField(required=True, unique=True)

user = User()
user.username = 'nick'
user.save()

user = User.objects.get(username='nick') # exception thrown here matching User not found
user.username = 'changed'
user.save()

有没有办法诊断这是否属实?我应该打电话给user.save(write_concern={'w':0})

【问题讨论】:

  • 因为您希望它也传播到辅助节点,所以您需要它是replica acknowledged
  • 我不确定我是否理解,你是说我对问题的诊断是正确的,但它不应该是 write_concern {'w':0} 而是 {'w': 2}这是副本确认。我以为那实际上是默认设置?
  • 是的,你是对的。我认为您的诊断是正确的(我不能确定,但​​听起来很合理)。是的,您应该将其更改为2。据我所知,默认值为 0(但在 2.4 中对写入问题的简短搜索并未发现它。

标签: mongodb mongoengine database


【解决方案1】:

使用 save(..., write_concern={w: 2, fsync: True}, ...) 因为 mongoengine 默认写关注点是None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    相关资源
    最近更新 更多