- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含 3 个成员的 MongoDB 副本集和一个在其中存储数据的 Python 应用程序。
当使用带有包装器的单个文档插入时,我可以处理 pymongo 的 AutoReconnect
异常,如下所示:
def safe_mongo_call(method, num_retries, *args, **kwargs):
while True:
try:
return method(*args, **kwargs)
except (pymongo.errors.AutoReconnect,
pymongo.errors.ServerSelectionTimeoutError) as e:
if num_retries > 0:
logger.debug('Retrying MongoDB operation: %s', str(e))
num_retries -= 1
else:
raise
我不确定在使用批量写入时如何处理这些异常,例如insert_many
方法。根据documentation ,批量写入不是原子的,因此即使发生其中一个异常,也可能已经有一些文档成功写入数据库。因此,我不能像上面那样简单地重用包装器方法。
处理这些情况的最佳方法是什么?
最佳答案
对于这种情况,BulkWriteError 必须提供已完成操作的详细信息 https://api.mongodb.com/python/current/examples/bulk.html#ordered-bulk-write-operations
但是如果连接丢失,则会发送自动重新连接,并且操作进度信息似乎会丢失(针对 pymongo==3.5.1 进行了测试)
无论如何,您都需要重建已写入的内容和未写入的内容,并对其余项目重试该操作。在后一种情况下,会有点困难,因为您没有关于实际编写的内容的事先信息,但仍然可行
作为草图解决方案:每个要插入的文档都会分配一个ObjectId,除非_id已经存在。您可以自己处理这个问题 - 迭代文档,为丢失的文档手动分配 _id 并将 ID 保存在临时变量中。一旦遇到异常,就会找到最后一个成功插入的 _id,利用类似于二分搜索的方法,最多可以进行 ~O(logN) 查询,并且还可以使用批量操作被拆分为较小批处理的事实(https://api.mongodb.com/python/current/examples/bulk.html#bulk-insert)。但当然,这种方法的适用性取决于 mongod 实例上的负载配置文件以及是否允许额外的查询突发。如果按预期抛出 BulkWriteError,您可以只抓取未插入的文档,然后仅对这些文档重试该操作。
回到自动重新连接问题,我个人会在mongo-python-driver问题跟踪器中开一张票,很可能是一个错误或像这样完成故意的
关于mongodb - 如何使用 insert_many 方法处理 pymongo AutoReconnect 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44450575/
我就废话不多说了,大家还是直接看代码吧~ ? 1
我正在尝试将以下名为 posts 的字典列表插入到 mongo 中,但出现了一个 BulkWriteError: batch op errors occurred 错误,我不知道该怎么做修复。 帖子:
在将 insert_many 与 pymongo 一起使用时,我需要忽略重复插入,其中重复项基于索引。我在 stackoverflow 上看到过这个问题,但没有看到有用的答案。 这是我的代码片段: t
我目前正在尝试使用 C++ 应用程序最大限度地提高插入的写入速度到 MongoDB 中。我看到的行为是 insert_many() 操作会变慢,导致写队列建立,然后后续的 insert_many()
我目前正在尝试编写一个脚本,将文档插入 MongoDb 并返回每个元素的存储位置。非常简单,感谢 insert_many(),但是如果我在插入时出现错误,我的问题就会出现。 我将无法获取刚刚插入的 I
我想在我的集合中insert_many() 文件。其中一些可能与集合中的现有文档具有相同的键/值对(在我的示例中为 screen_name)。我在此键上设置了唯一索引,因此出现错误。 my_colle
mongo/pymongo 的新手。目前使用最新-v3.2.2 看起来 insert_many 没有按预期执行?我注意到,即使在为 db.col.insert_many 提供生成器时,内存使用量仍然会
这个问题在这里已经有了答案: Fast or Bulk Upsert in pymongo (6 个回答) 关闭3年前。 我有一些这样的数据: data = [{'_id': 1, 'val': 5}
我有一个包含 3 个成员的 MongoDB 副本集和一个在其中存储数据的 Python 应用程序。 当使用带有包装器的单个文档插入时,我可以处理 pymongo 的 AutoReconnect 异常,
作为练习,我从 API 中提取数据并将其插入到 psql 数据库中。我最初遵循每次拉取 1000 个条目的默认限制,但我决定尝试获取大约 40K 行的所有数据。经过一些实验后,我可以拉出 4800,但
我正在尝试将文档从一个数据库增量复制到另一个数据库。 某些字段包含以下格式的日期时间值: 2016-09-22 00:00:00 而其他的则采用这种格式: 2016-09-27 09:03:08.98
我正在使用一种方法将一些数据存储在 MongoDB 数据库中。 void save_data(std::vector list){ using namespace std; using
我正在更新一个包含数百万文档且 _id 冲突少于 10 个的数据库。 我目前正在使用 PyMongo 模块通过 insert_many 进行批量插入: 查询数据库以查看_id 是否存在 如果 _id
我是一名优秀的程序员,十分优秀!