【问题标题】:Is MongoDB thread-safe?MongoDB 是线程安全的吗?
【发布时间】:2011-09-28 07:20:34
【问题描述】:

我在 Windows 上运行 MongoDB。我有 1 个或多个线程会删除并重新创建一个集合。

mongo.exeshow collections() 命令一起使用,我看到多个同名集合(远超过1,000 个同名集合!)。

当我运行验证时:

> db.MY_COLLECTION.validate()

我明白了:

{ "errmsg" : "ns not found", "ok" : 0, "valid" : false }

size() 命令返回 0,find() 什么也不返回。

我的问题是:MongoDB 线程安全吗?后续问题可能类似于 “我这样做是否正确(删除并重新创建)还是有更好的方法来刷新集合的全部内容?”

【问题讨论】:

    标签: multithreading mongodb concurrency thread-safety document-database


    【解决方案1】:

    来自 mongodb 文档:

    线程安全

    只有少数 C# 驱动程序类是线程安全的。其中:MongoServer、MongoDatabase、MongoCollection 和 MongoGridFS。您将经常使用的非线程安全的常见类包括 MongoCursor 和 BSON 库中的所有类(线程安全的 BsonSymbolTable 除外)。一个类不是线程安全的,除非特别记录为线程安全的。

    所有类的所有静态属性和方法都是线程安全的。

    你可以在这个页面搜索线程这个词:

    http://mongodb.onconfluence.com/pages/viewpage.action?pageId=18907708&navigatingVersions=true#CSharpDriverTutorial-Threadsafety

    【讨论】:

    • 以上链接似乎不再有效。
    【解决方案2】:

    在 2.2 版中更改。

    MongoDB 允许多个客户端使用锁定系统读取和写入单个数据集,以确保所有客户端接收到一致的数据视图,并防止多个应用程序同时修改完全相同的数据块。锁有助于保证对单个文档的所有写入要么全部发生,要么根本不发生。

    http://docs.mongodb.org/manual/faq/concurrency/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-12
      • 2015-04-18
      • 2011-10-07
      • 2012-03-02
      • 2011-10-28
      • 2023-03-14
      • 2016-08-24
      • 2011-08-16
      相关资源
      最近更新 更多