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

MongoDB:Milliarder af dokumenter i en samling

Det er svært at sige, hvad den optimale bulk-indsats er - dette afhænger til dels af størrelsen på de objekter, du indsætter, og andre umådelige faktorer. Du kan prøve et par intervaller og se, hvad der giver dig den bedste ydeevne. Som et alternativ kan nogle mennesker lide at bruge mongoimport, hvilket er ret hurtigt, men dine importdata skal være json eller csv. Der er åbenbart mongodrestore, hvis dataene er i BSON-format.

Mongo kan nemt håndtere milliarder af dokumenter og kan have milliarder af dokumenter i den ene samling, men husk at maksimal dokumentstørrelse er 16 MB . Der er mange mennesker med milliarder af dokumenter i MongoDB, og der er masser af diskussioner om det på MongoDB Google-brugergruppe . Her er et dokument på at bruge en lang række samlinger, som du måske kunne tænke dig at læse, hvis du ombestemmer dig og vil have flere samlinger i stedet for. Jo flere samlinger du har, jo flere indekser vil du også have, hvilket sandsynligvis ikke er, hvad du ønsker.

Her er en præsentation fra Craigslist om at indsætte milliarder af dokumenter i MongoDB og fyrens blogindlæg .

Det ser ud til, at sharding ville være en god løsning for dig, men typisk bruges sharding til skalering på tværs af flere servere, og mange mennesker gør det, fordi de vil skalere deres skrivninger, eller de er ude af stand til at beholde deres arbejdssæt (data og indekser) i RAM. Det er helt rimeligt at starte med en enkelt server og derefter flytte til et shard eller replika-sæt, efterhånden som dine data vokser, eller du har brug for ekstra redundans og robusthed.

Der er dog andre brugere, der bruger flere mongods til at omgå låsegrænserne for en enkelt mongod med masser af skrivninger. Det er indlysende, men stadig værd at sige, men en multi-mongod opsætning er mere kompleks at administrere end en enkelt server. Hvis din IO eller cpu ikke er maxed her, dit arbejdssæt er mindre end RAM og dine data er nemme at holde afbalanceret (temmelig tilfældigt fordelt), bør du se forbedringer (med sharding på en enkelt server). Som FYI er der potentiale for hukommelse og IO-stridigheder. Med 2.2 har forbedret samtidighed med db låsning , jeg formoder, at der vil være meget mindre grund til en sådan udrulning.

Du skal planlægge dit skift til sharding ordentligt, dvs. tænke grundigt over valget af din shard-nøgle. Hvis du går denne vej, er det bedst at for-opdele og slukke balanceren. Det vil være kontraproduktivt at flytte data rundt for at holde tingene afbalanceret, hvilket betyder, at du bliver nødt til at beslutte på forhånd, hvordan du opdeler dem. Derudover er det nogle gange vigtigt at designe dine dokumenter med tanken om, at nogle felter vil være nyttige til sharding på eller som en primær nøgle.

Her er nogle gode links -



  1. Mongodb sparer en dag mindre - Tidszoneudgave

  2. Mongoose gemmer ikke data til MongoDB

  3. gradle bygge lokale værker. I docker-container gør det ikke. HVORFOR?

  4. Kan ikke binde TCP-lytter *:6379 ved hjælp af Redis på Windows