0

什么是最好的解决方案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 端的更新与我自己的设置不兼容有关。

关于诸如:如何在 Mongo 中修复 retryWrites 的讨论?我遇到了该问题的有效修复程序。修复要求将retryWrites=false选项传递给 MongoClient,但在我看来,虽然我可以绕过错误,但我的 MongoDB 部署中不受支持的功能的问题并没有真正得到解决。

4

1 回答 1

1

已针对 MongoDB 4.2 更新的官方驱动程序默认启用可重试写入。

所有现代版本的 MongoDB 服务器(我包括 MongoDB 3.6+,因为 3.4 将在下个月停止使用)还默认包括可重试写入支持。

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

为了解决这个问题,您的选择是:

  • 使用 WiredTiger 将您的服务器和存储引擎升级到 MongoDB 3.6+。您还需要一个副本集部署(可以是用于开发/测试目的的单个成员副本集)。
  • 添加retryWrites=false到您的驱动程序连接字符串。
  • 降级到较旧的驱动程序版本(例如,兼容 4.0)。

我建议升级您的 MongoDB 部署,特别是如果您仍在使用已弃用的 MMAPv1 存储引擎或 EOL 服务器版本。

于 2019-12-17T01:47:50.920 回答