2010-03-22 5 views

ответ

2

Mongo предназначен для работы на сервере с репликацией. На самом деле он не предназначен как база данных для настольных приложений (если только они не подключаются к базе данных на центральном сервере). В блоге MongoDB есть blog post on durability, это общий вопрос.

Когда происходит запись и команда возвращает записи, мы не можем быть на 100% уверен, что с этого момента времени на, все остальные процессы будут видеть только обновленные данные.

В каждом драйвере должна быть предусмотрена возможность «безопасной» вставки или обновления, которая ожидает ответа базы данных. Я не знаю, какой драйвер вы планируете использовать (есть несколько для .NET, http://github.com/samus/mongodb-csharp - наиболее официально поддерживается), но драйвер не предлагает безопасный вариант, вы можете запустить команду getLastError для синхронизации вещей вручную.

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

Существует команда fsync, которую вы можете запустить после каждой операции, если вы действительно этого хотите. Опять же, Монго идет с философией «безопасность в цифрах» и призывает всех, кто работает в производстве, иметь хотя бы одного подчиненного для резервного копирования.

+0

кажется плохой идеей, тогда нет? – Chet

+0

@Chet: на самом деле, поскольку этот ответ был написан, были добавлены длительные записи, поэтому проблема безопасности больше не возникает. Тем не менее, по-прежнему представляется нецелесообразным заставить пользователей запускать сервер баз данных для (большинства) приложений. – kristina

0

Это зависит от того, что вы хотите сохранить в базе данных.

Согласно Wikipedia;

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

Доступен .NET driver. И here - это некоторая информация, которая поможет вам начать работу. Но сначала вы должны спросить себя; что вы хотите сохранить и каковы дальнейшие требования. (поддержка хранимых процедур, триггеры, ожидаемый размер и т. д.)

+0

Ну, MongoDB соответствует нашим требованиям, но есть некоторые проблемы: 1. Когда происходит запись и команда записи возвращается, мы не можем быть на 100% уверены, что с этого момента все остальные процессы будут видеть только обновленные данные. 2. MongoDB не гарантирует, что ваши данные находятся на жестком диске немедленно. В результате вы можете потерять данные, которые, по вашему мнению, уже были записаны, если ваш сервер опустился за период между записью и фактическим хранением на жестком диске. – SHSE

+0

Хорошо, но я полагаю, вы хотите хранить статистику и так далее? Если это так, конечно, всегда важно, чтобы вы были уверены, что вставленные данные фактически сохранены, но если эта проблема менее важна, чем скорость ... Но лично; с известными проблемами я бы поискал лучшие альтернативы.Например, такой большой, как Oracle или SQL Server или, возможно, MySQL или SQLite. Можете ли вы дать более подробную информацию о том, что и сколько вы хотите сохранить в db? – Rhapsody

+0

MongoDB работает быстро, быстрее, потому что не сохраняет данные на жестком диске сразу. Он также быстрее, потому что он имеет конечную согласованность, а не полную согласованность в конфигурации нескольких узлов. Все дело в компромиссах. Если вам нужна/нужна полная согласованность и полная долговечность, вы должны использовать Oracle (RAC) или Sql Server или ... – Theo

Смежные вопросы