sql >> Database teknologi >  >> NoSQL >> MongoDB

Gør django med mongodb migrationer til fortiden?

Jeg synes, det er et rigtig godt spørgsmål, men svarene vil være lidt spredte baseret på de libs, du bruger, og dine forventninger til en "migrering".

Lad os tage et kig på nogle almindelige migreringshandlinger:

  • Tilføj et felt: Mongo gør dette meget nemt. Du skal blot tilføje et felt, og du er færdig.
  • Slet et felt: I teorien er du faktisk ikke bundet til dit skema, så "sletning" her er relativt. Hvis du fjerner "egenskaben" og ikke længere indlæser feltet, så er det lige meget om det felt er i dataene. Så hvis du ikke bekymrer sig om at "rydde op" i databasen, så at fjerne et felt påvirker ikke databasen. Hvis du gør bekymrer sig om at rense DB'en, skal du dybest set køre en kæmpe for loop mod DB'en.
  • Rediger et feltnavn: Dette er også et vanskeligt problem. Når du omdøber et felt "hvor" omdøber du det? Hvis du vil have DB'en til at afspejle det nye feltnavn, så skal du som udgangspunkt udføre en giant for loop på DB'en. For at være sikker skal du sandsynligvis "tilføje" data, derefter trykke kode og derefter "fjerne" det gamle felt.

Nogle rynker

Konceptet med et feltnavn i tandem med et ActiveRecord-objekt er dog bare lidt skævt. Et ActiveRecord-objekt leverer effektivt tilknytninger af objektegenskaber til faktiske databasefelter.

I et typisk RDBMS er "størrelsen" af et feltnavn ikke rigtig relevant. Men i Mongo optager feltnavnet faktisk dataplads, og dette gør en stor forskel med hensyn til ydeevne.

Nu, hvis du bruger en form for "dataobjekt" som ActiveRecord, hvorfor ville du så forsøge at gemme fulde feltnavne i dataene? DB'en burde sandsynligvis gemme alle felter i alfabetisk rækkefølge med et kort på objektsiden. Så et dokument kunne have 8 felter/egenskaber, og DB-navnene ville være "a", "b"..."j", men objektnavnene ville være læsbare ting som "Navn", "Pris", "Mængde".

Grunden til, at jeg bringer dette op, er, at det tilføjer endnu en rynke til Rediger et feltnavn . Hvis du implementerer en kortlægning, forårsager ændring af et feltnavn slet ikke en migrering.

Nogle flere rynker

Hvis du gør ønsker at implementere en migrering på en sletning, så bliver du nødt til at gøre det efter en indsættelse. Du bliver også nødt til at erkende, at du ikke vil gemme nogen aktuel diskplads, når du gør det.

Mongo forhåndstildeler plads, og den "giver den ikke tilbage", medmindre du laver en DB-reparation. Så hvis du sletter en masse felter på dokumenter, optager disse dokumenter stadig den samme plads på disken. Hvis dokumenterne senere flyttes, kan du kræve plads tilbage, men dokumenter flyttes først, når de vokser.

Hvis du fjerner et stort felt fra mange dokumenter, vil du gerne lave en reparation eller tjekke den nye in-place compact kommando.



  1. spor slettede dokumenter i Mongo DB's begrænsede samling

  2. mongoDB:$inc af et ikke-eksisterende dokument i et array

  3. MongoDB replikasæt med simpel adgangskodegodkendelse

  4. Tilslutning af Heroku App til Atlas MongoDB Cloud-tjeneste