2010-08-31 11 views
3

Comment faire une écriture "sécurisée" qui se vide immédiatement sur le disque à partir de javascript? J'aimerais pouvoir le faire à partir du shell et d'une procédure "CRUD" javascript stockée. Est-ce juste une question de:Ecriture sécurisée à partir du shell mongodb

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

Le wiki n'est pas clair sur ce point.

+1

Le shell appelle déjà getlasterror après chaque insertion, mais il ne se vide pas automatiquement sur le disque. – kristina

Répondre

3

Oui, vous utilisez la Last Error command, mais vous devez définir le drapeau fsync (et/ou le replication parameter, selon votre définition de « sécurité »):

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

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

Si vous faites plus Si vous écrivez, vous pouvez demander fsync ou la réplication après la dernière. Cela rendra également toutes les écritures antérieures "sûres" (puisqu'elles sont appliquées dans l'ordre). Vous n'avez pas à payer le coût pour chaque écriture (sauf si vous avez besoin d'être sûr individuellement, pas seulement comme un ensemble).

+0

Thilo, je n'ai pas de partition, pas de jeu de réplicas, rien d'autre qu'une sauvegarde par jour, que je fais tester. Si sûr est "écrire sur ce serveur." Je sais que la "durabilité du serveur unique" arrive en 1.8, mais je ne suis pas vraiment sûr de ce que cela signifie. –

+0

La durabilité d'un seul serveur signifie que vous ne risquez pas de perdre des données entre fsync. Cela signifie probablement aussi une récupération plus rapide de la base de données (maintenant, vous perdez seulement une minute de données, mais la réparation de la base de données peut prendre beaucoup de temps avant que vous soyez de nouveau en ligne). Dans les bases de données traditionnelles (comme Oracle), ceci est implémenté à l'aide d'un journal redo: même si vous ne synchronisez pas la base de données entière sur le disque à chaque validation, vous écrivez suffisamment d'informations pour pouvoir reconstituer ce qui manque. Je ne sais pas si c'est l'approche prévue pour 1.8, cependant. – Thilo

+1

La durabilité d'un seul serveur nécessite toujours que vous n'ayez pas de panne de disque (il ne protège que contre les coupures de courant et autres). Si vous perdez le disque et n'avez pas de réplication (ou de RAID), vous perdez toutes les données depuis votre dernière sauvegarde externe. – Thilo

Questions connexes