gpt4 book ai didi

mongodb - 多进程的 Upsert 重复键错误(Mongo>=3.0.4 WiredTiger)

转载 作者:IT老高 更新时间:2023-10-28 13:15:22 28 4
gpt4 key购买 nike

全部

我刚刚从我们的应用程序中收到一个奇怪的错误:

当我用两个进程进行更新时,它提示在一个带有唯一索引的集合上出现重复键错误,但有问题的操作是一个 upsert。

案例代码:

import time
from bson import Binary
from pymongo import MongoClient, DESCENDING

bucket = MongoClient('127.0.0.1', 27017)['test']['foo']
bucket.drop()
bucket.update({'timestamp': 0}, {'$addToSet': {'_exists_caps': 'cap15'}}, upsert=True, safe=True, w=1, wtimeout=10)
bucket.create_index([('timestamp', DESCENDING)], unique=True)
while True:
timestamp = str(int(1000000 * time.time()))
bucket.update({'timestamp': timestamp}, {'$addToSet': {'_exists_foos': 'fooxxxxx'}}, upsert=True, safe=True, w=1, wtimeout=10)

当我使用两个进程运行脚本时,Pymongo 异常:

Traceback (most recent call last):
File "test_mongo_update.py", line 11, in <module>
bucket.update({'timestamp': timestamp}, {'$addToSet': {'_exists_foos': 'fooxxxxx'}}, upsert=True, safe=True, w=1, wtimeout=10)
File "build/bdist.linux-x86_64/egg/pymongo/collection.py", line 552, in update
File "build/bdist.linux-x86_64/egg/pymongo/helpers.py", line 202, in _check_write_command_response
pymongo.errors.DuplicateKeyError: E11000 duplicate key error collection: test.foo index: timestamp_-1 dup key: { : "1439374020348044" }

环境:

  • mongodb 3.0.5,WiredTiger

  • 单个 mongodb 实例

  • pymongo 2.8.1

mongo.conf

systemLog:
destination: file
logAppend: true
logRotate: reopen
path: /opt/lib/log/mongod.log

# Where and how to store data.
storage:
dbPath: /opt/lib/mongo
journal:
enabled: true

engine: "wiredTiger"
directoryPerDB: true

# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /opt/lib/mongo/mongod.pid

# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.

setParameter:
enableLocalhostAuthBypass: false

对这里可能出了什么问题有什么想法吗?

PS:

我在 MMAPV1 存储引擎中重试了同样的情况,它工作正常,为什么?

我在这里找到了一些相关的东西: https://jira.mongodb.org/browse/SERVER-18213

但是在这个bug修复之后,它会出现这个错误,所以看起来这个bug没有完全修复。

干杯

最佳答案

我在以下位置发现了错误: https://jira.mongodb.org/browse/SERVER-14322

请随时为它投票并观看它以获取更多更新。

关于mongodb - 多进程的 Upsert 重复键错误(Mongo>=3.0.4 WiredTiger),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31962539/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com