Det bästa är att använda Write Concerns – dessa låter dig berätta för MongoDB hur viktig en databit är. Det snabbaste skrivproblemet är också det minst säkra - data spolas inte till disken förrän nästa schemalagda tömning. Den säkraste kommer att bekräfta att data har skrivits till disken på ett antal maskiner innan de returneras.
Skrivproblemet du letar efter är FSYNC_SAFE (åtminstone är det vad det kallas ur Java-drivrutin ) eller REPLICAS_SAFE som bekräftar att din data har replikerats.
Tänk på att MongoDB inte har transaktioner i traditionell mening - din återställning måste rullas för hand eftersom du inte kan säga till Mongo-databasen att göra detta åt dig.
Det andra du behöver göra är att antingen använda den relativt nya --journal
alternativet (som använder en Write Ahead Log), eller använd replikuppsättningar för att dela dina data på många maskiner för att maximera dataintegriteten i händelse av en krasch/strömavbrott.
Sharding är inte så mycket ett skydd mot hårdvarufel som en metod för att dela belastningen när man hanterar särskilt stora datamängder - sharding ska inte förväxlas med replikuppsättningar som är ett sätt att skriva data till mer än en disk på mer än en maskin .
Därför, om din data är tillräckligt värdefull, bör du definitivt använda replikuppsättningar, kanske till och med placera slavar i andra datacenter/tillgänglighetszoner/rack/etc för att ge den motståndskraft du behöver.
Det finns/kommer att finnas (kommer inte ihåg direkt om detta har implementerats ännu) ett sätt att specificera prioriteten för enskilda noder i en replikuppsättning så att om mastern går ner är den nya mastern som väljs en i samma data center om en sådan maskin är tillgänglig (dvs. att stoppa en slav på andra sidan landet från att bli herre om det inte verkligen är det enda andra alternativet).