通过部署更新而不是通过显式传递的选项修复了Mongo RetryableWrite?

问题描述 投票:0回答:1

This MongoDB deployment does not support retryable writes的最佳解决方案是什么?是否有我应该使用的版本/设置(例如,找到从MMAPv1切换到WiredTiger的方法),或者显式的retryWrites=false设置更新确实是heroku mlab部署的最佳解决方案?

背景

在过去几周的某个时间点,我的Heroku提供的mLab进行了大约一年的运行,在任何尝试写入时,它都运行了大约一年:

Exception: This MongoDB deployment does not support retryable writes. Please add retryWrites=false to your connection string.

我没有对部署或驱动程序进行任何更改,因此我认为此新异常与mlab端的更新与我自己的设置不兼容有关。

关于诸如How to fix retryWrites in Mongo?之类的讨论,我遇到了对该问题的解决方法。该修补程序要求将retryWrites=false选项传递给MongoClient,但在我看来,尽管我可以绕过该错误,但MongoDB部署上不受支持的功能的问题尚未得到真正解决。

mongodb heroku pymongo mlab storage-engines
1个回答
1
投票

已为MongoDB 4.2更新的官方驱动程序中的[可重试写入为enabled by default

所有最新版本的MongoDB服务器(我将包括MongoDB 3.6+,因为3.4将于下个月终止),默认情况下还包括可重试的写支持。

错误消息表明您具有较旧的服务器部署或配置,不支持可重试的写入。

要解决此问题,您的选择是:

  • 使用WiredTiger将服务器和存储引擎升级到MongoDB 3.6+。您还需要一个副本集部署(出于开发/测试目的,它可以是单个成员副本集)。
  • retryWrites=false添加到驱动程序连接字符串。
  • 降级到较旧的驱动程序版本(例如,具有4.0兼容性)。
  • 我建议升级您的MongoDB部署,尤其是如果您仍在使用不赞成使用的MMAPv1存储引擎或EOL服务器版本时。

© www.soinside.com 2019 - 2024. All rights reserved.