MongoDB是线程安全的吗?

时间:2011-07-04 17:37:26

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

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

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

当我运行验证时:

> db.MY_COLLECTION.validate()

我明白了:

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

size()命令返回0,find()不返回任何内容。

我的问题是:MongoDB线程安全吗?接下来的问题就像'我是否正确地执行此操作(删除并重新创建)或者是否有更好的方法来刷新集合的整个内容?'

2 个答案:

答案 0 :(得分:6)

来自mongodb文档:

线程安全

只有少数C#Driver类是线程安全的。其中包括:MongoServer,MongoDatabase,MongoCollection和MongoGridFS。您将使用很多非线程安全的公共类包括MongoCursor和BSON库中的所有类(BsonSymbolTable除外,它是线程安全的)。除非特别记录为线程安全,否则类不是线程安全的。

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

您可以在此页面上搜索“线程”一词:

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

答案 1 :(得分:4)

2.2版更改。

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

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