9

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

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

当我运行验证时:

> db.MY_COLLECTION.validate()

我得到:

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

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

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

4

2 回答 2

7

来自 mongodb 文档:

线程安全

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

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

您可以在此页面上搜索 Thread 一词:

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

于 2011-07-04T17:47:48.823 回答
5

在 2.2 版中更改。

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

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

于 2012-12-27T05:14:44.763 回答