Hvis MongoDB har en akilleshæl, er det det faktum, at det kun understøtter enkelttrådede skrivninger og enkelttrådede kortreducerer.
Som altid er der afvejninger her. Enkelt-trådsskrivning er den enkleste måde at undgå låseproblemer og minimere overhead. På samme måde er multi-threaded map-reducer en fantastisk måde at låse dine data på. Så enkelt-trådede kort-reducerer på et produktionssystem er sandsynligvis nemmere og sikrere.
Du er dog ikke uden værktøjer her. MongoDB vil give en skrivetråd til hver instans. Så hvis du shard MongoDB, så får du en skrivetråd for hver shard.
Hvis du vil have flere indekser på 2 milliarder rækker, vil du alligevel se på sharding. Lidt hurtig matematik her:MongoID er 12 bytes. Indeks på MongoID vil være 2B * 12 bytes =22GB+. Hvis du nu vil tilføje yderligere to indekser (selv kun to 4-byte heltal), taler vi om 7,5 GB for hver.
Så ved 2B rækker taler du om at have over 37 GB i indekser (minimum ). På de fleste 8-core servere betyder det, at du ikke engang vil være i stand til at opbevare dine indekser i hukommelsen, endsige nogen af dataene.
Så hvis du vil have seriøs præstation her, skal du begynde at se på sharding. Bare baseret på de generelle tal. FWIW, MySQL ville ikke være mere dygtig til at håndtere 2B-dokumenter. Med så mange data vil du virkelig have flere servere til at holde trit med belastningen.