sql >> Databasteknik >  >> NoSQL >> MongoDB

Gör django med mongodb migrationer till ett minne blott?

Jag tycker att det här är en riktigt bra fråga, men svaren kommer att vara lite spridda baserat på de libs du använder och dina förväntningar på en "migrering".

Låt oss ta en titt på några vanliga migreringsåtgärder:

  • Lägg till ett fält: Mongo gör detta väldigt enkelt. Lägg bara till ett fält och du är klar.
  • Ta bort ett fält: I teorin är du faktiskt inte bunden till ditt schema, så "radering" här är relativt. Om du tar bort "egenskapen" och inte längre laddar fältet så spelar det egentligen ingen roll om det fältet finns i datan. Så om du inte gör det bryr sig om att "städa upp" databasen, att ta bort ett fält påverkar inte databasen. Om du gör bryr sig om att rengöra DB:n, du måste i princip köra en jätte för loop mot DB.
  • Ändra ett fältnamn: Detta är också ett svårt problem. När du byter namn på ett fält till "var" byter du namn på det? Om du vill att DB ska återspegla det nya fältnamnet, måste du i princip köra en jätte for loop på DB. För att vara säker måste du förmodligen "lägga till" data, sedan trycka kod och sedan "avaktivera" det gamla fältet.

Några rynkor

Konceptet med ett fältnamn tillsammans med ett ActiveRecord-objekt är dock bara lite skevt. Ett ActiveRecord-objekt tillhandahåller effektivt mappningar av objektegenskaper till faktiska databasfält.

I ett typiskt RDBMS är "storleken" på ett fältnamn inte riktigt relevant. Men i Mongo tar fältnamnet faktiskt upp datautrymme och detta gör stor skillnad när det gäller prestanda.

Om du nu använder någon form av "dataobjekt" som ActiveRecord, varför skulle du försöka lagra fullständiga fältnamn i datan? DB bör förmodligen lagra alla fält i alfabetisk ordning med en karta på objektsidan. Så ett dokument kan ha 8 fält/egenskaper och DB-namnen skulle vara "a", "b"..."j", men objektnamnen skulle vara läsbara saker som "Namn", "Pris", "Quantity".

Anledningen till att jag tar upp det här är att det lägger till ytterligare en rynka för att Ändra ett fältnamn . Om du implementerar en mappning orsakar det egentligen ingen migrering att ändra ett fältnamn.

Några fler rynkor

Om du gör vill implementera en migrering vid en borttagning, måste du göra det efter en utplacering. Du måste också inse att du inte kommer att spara något aktuellt diskutrymme när du gör det.

Mongo förtilldelar utrymme och det "ger det inte tillbaka" om du inte gör en DB-reparation. Så om du tar bort ett gäng fält på dokument, upptar dessa dokument fortfarande samma utrymme på disken. Om dokumenten flyttas senare kan du ta tillbaka utrymme, men dokument flyttas bara när de växer.

Om du tar bort ett stort fält från många dokument kommer du att vilja göra en reparation eller kolla in den nya in-place compact kommando.



  1. Hur man ansluter till MySQL utan root-lösenord på terminal

  2. Internt serverfel vid migrering av Parse till Heroku/AWS

  3. Morphia-projektionsbeteende till exempel variabel med standardvärde

  4. Realtidskommunikation mellan app och webbsida