gpt4 book ai didi

python - 并发进程可以写入共享数据库吗?

转载 作者:太空狗 更新时间:2023-10-29 23:58:40 24 4
gpt4 key购买 nike

我正在使用 Python 多处理库生成多个进程,每个进程写入一个共享 (MongoDB) 数据库。这是安全的,还是写入会相互覆盖?

最佳答案

只要您确保为每个工作进程创建一个单独的数据库连接,让多个进程同时访问一个数据库是绝对安全的。他们发出的任何对数据库进行更改的查询都将单独应用,通常按照数据库接收它们的顺序。在大多数情况下,这将是安全的,但是:

  • 如果您的流程只是将文档插入数据库,则每次插入通常会创建一个单独的对象。

    异常(exception)情况是,如果您为文档显式指定 _id,并且该标识符已在集合中使用。这将导致插入失败。 (所以不要那样做:将 _id 留在外面,MongoDB 将始终为您生成一个唯一的值。)

  • 如果您的进程正在从数据库中删除文档,而另一个进程已经删除了相同的对象,则操作将失败。 (但这并不是严格意义上的失败;它只是意味着其他人比你先到达了那里。)

  • 如果您的流程正在更新数据库中的文档,事情就会变得更加模糊。

    只要每个进程更新不同的文档,就没问题。

    如果多个进程试图同时更新同一个文档,您就需要小心了。替换对象值的更新将按顺序应用,这可能会导致一个进程所做的更改无意中被另一个进程覆盖。您应该小心避免指定您不打算更改的字段。使用 MongoDB 的 update operators可能有助于以原子方式执行复杂的操作,例如更改字段的数值。

请注意,“同时”并不一定意味着操作发生在完全的同一时间。更一般地说,这意味着两个进程处理同一文档的时间存在“重叠”,例如

Process A                    Process B
--------- ---------
Reads object from DB ...
working... Reads object from DB
working... working...
updates object with changes working...
updates object with changes

在上述情况下,进程 A 所做的某些更改可能会无意中被进程 B 覆盖。

关于python - 并发进程可以写入共享数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30020944/

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