sql >> Databasteknik >  >> NoSQL >> MongoDB

Sätt att implementera dataversionering i MongoDB

Den första stora frågan när du dyker in i detta är "hur vill du lagra ändringar" ?

  1. Skillnader?
  2. Hela skivkopior?

Min personliga inställning skulle vara att lagra diff. Eftersom visningen av dessa diffar verkligen är en speciell åtgärd, skulle jag placera diffarna i en annan "historia"-samling.

Jag skulle använda den andra samlingen för att spara minnesutrymme. Du vill vanligtvis inte ha en fullständig historik för en enkel fråga. Så genom att hålla historiken borta från objektet kan du också hålla den borta från det vanliga minnet när den informationen efterfrågas.

För att göra mitt liv lätt, skulle jag göra ett historiedokument innehålla en ordbok över tidsstämplade skillnader. Något så här:

{
    _id : "id of address book record",
    changes : { 
                1234567 : { "city" : "Omaha", "state" : "Nebraska" },
                1234568 : { "city" : "Kansas City", "state" : "Missouri" }
               }
}

För att göra mitt liv riktigt enkelt skulle jag göra den här delen av mina DataObjects (EntityWrapper, vad som helst) som jag använder för att komma åt mina data. I allmänhet har dessa objekt någon form av historik, så att du enkelt kan åsidosätta save() metod för att göra denna ändring samtidigt.

UPPDATERING:2015-10

Det ser ut som att det nu finns en spec för hantering av JSON-diffar. Detta verkar vara ett mer robust sätt att lagra diffarna/ändringarna.



  1. Redis publicera/prenumerera:se vilka kanaler som för närvarande prenumererar på

  2. Hur man kommer åt MongoDB

  3. Ta bort element från kapslad array mongodb

  4. SSL-anslutning till Redis med StackExchange.Redis