Является ли MongoDB потокобезопасным?

Я запускаю MongoDB в Windows. У меня есть 1 или более потоков, которые удаляют и воссоздают коллекцию.

используя mongo.exe С show collections() команда, я вижу несколько коллекций с тем же именем (более 1000 коллекций с тем же именем!).

когда я запускаю validate:

> db.MY_COLLECTION.validate()

Я:

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

на size() команда возвращает 0 и find() ничего не возвращает.

мой вопрос: Является ли поток MongoDB безопасным? Продолжение вопрос был бы чем-то вроде ' я делаю это правильно (удаление и воссоздание) или есть лучший способ обновить все содержимое коллекции?'

2 ответов


из документации mongodb:

потокобезопасность

только несколько классов драйверов C# являются потокобезопасными. Среди них: MongoServer, MongoDatabase, MongoCollection и MongoGridFS. Общие классы вы будете использовать много, которые не являются потокобезопасными, включают MongoCursor и все классы из библиотеки BSON (кроме bsonsymboltable, который является потокобезопасным). Класс не является потокобезопасным, если специально не задокументирован как потокобезопасный.

все статические свойства и методы всех классов являются потокобезопасными.

вы можете найти слово поток на этой странице:

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


изменено в версии 2.2.

MongoDB позволяет нескольким клиентам читать и записывать один корпус данных с помощью системы блокировки, чтобы гарантировать, что все клиенты получают согласованное представление данных и предотвратить несколько приложений от изменения одних и тех же частей данных в то же время. Блокировки помогают гарантировать, что все записи в один документ выполняются полностью или не выполняются вообще.

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