2010-08-31 5 views
3

Как сделать «безопасную» запись, которая сбрасывается на диск сразу из javascript? Я хотел бы иметь возможность сделать это как из оболочки, так и из хранимой процедуры JavaScript «CRUD». Это только вопрос:Безопасная запись из оболочки mongodb

db.foo.insert({stuff: "yes", meta: "physics"}); 
db.runCommand("getlasterror") ; 

wiki не указан.

+1

Оболочка уже вызывает getlasterror после каждой вставки, но она не сбрасывается на диск автоматически. – kristina

ответ

3

Да, вы будете использовать в Last Error command, но вам нужно установить флаг Fsync (и/или в replication parameter, в зависимости от вашего определения «безопасной»):

# force fsync 
> db.runCommand({getlasterror:1,fsync:true}) 

# wait for replication to one other server (w = 2) 
> db.runCommand({ getlasterror : 1 , w : 2 }) 

Если вы делаете более чем одна запись, вы можете запросить fsync или репликацию после последнего. Это сделает все предыдущие записи «безопасными» (так как они применяются в порядке). Вам не нужно оплачивать расходы за каждую запись (если вам не нужно, чтобы они были безопасными по отдельности, а не только как набор).

+0

Thilo, у меня нет осколков, нет наборов реплик, нет ничего, кроме одного раза в день, которые я тестирую. Так что безопасно «писать на этот сервер». Я знаю, что «прочность одного сервера» входит в 1,8, но я на самом деле не совсем уверен, что это значит. –

+0

Прочность одного сервера означает, что вы не рискуете потерять данные между fsync. Вероятно, это также означает более быстрое восстановление базы данных (теперь вы теряете только одну минуту данных, но при восстановлении базы данных может потребоваться много времени, прежде чем вы снова в сети). В традиционных базах данных (например, Oracle) это выполняется с использованием журнала повтора: несмотря на то, что вы не синхронизируете всю базу данных на диск при каждой фиксации, вы все равно записываете достаточно информации журнала, чтобы восстановить то, что отсутствует. Не уверен, что это подход, который запланирован на 1,8. – Thilo

+1

Устойчивость к одному серверу по-прежнему требует, чтобы у вас не было аварий на диске (он защищает только от сбоев питания и т. Д.). Если вы потеряете диск и не имеете репликации (или RAID), вы потеряете все данные с момента последней внешней резервной копии. – Thilo

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