sql >> Database >  >> NoSQL >> MongoDB

Is er een multicore-exploiterend NoSQL-systeem?

Als MongoDB een achilleshiel heeft, is het het feit dat het alleen single-threaded writes en single-threaded map-reduces ondersteunt.

Zoals altijd zijn er compromissen hier. Schrijven met één thread is de eenvoudigste manier om vergrendelingsproblemen te voorkomen en overhead te minimaliseren. Op dezelfde manier zijn kaartverkleiningen met meerdere threads een geweldige manier om uw gegevens te vergrendelen. Dus single-threaded kaartverkleiningen op een productiesysteem zijn waarschijnlijk makkelijker en veiliger.

U zit hier echter niet zonder gereedschap. MongoDB levert één schrijfthread aan elke instantie. Dus als u MongoDB shard, krijgt u één schrijfthread voor elke shard.

Als u meerdere indexen op 2 miljard rijen wilt, wilt u toch naar sharding kijken. Wat snelle wiskunde hier:MongoID is 12 bytes. Index op MongoID is 2B * 12 bytes =22GB+. Als u nu nog twee indexen wilt toevoegen (zelfs slechts twee gehele getallen van 4 bytes), hebben we het over 7,5 GB voor elk.

Dus bij 2B rijen heb je het over meer dan 37 GB aan indexen (minimum ). Op de meeste 8-core servers betekent dit dat u uw indexen niet eens in het geheugen kunt bewaren, laat staan ​​de gegevens.

Dus als je hier serieuze prestaties wilt, moet je naar sharding gaan kijken. Gewoon op basis van de algemene cijfers. FWIW, MySQL zou niet meer bedreven zijn in het omgaan met 2B-documenten. Met zoveel data wil je echt dat meerdere servers de belasting kunnen bijhouden.




  1. Afbeeldingen weergeven in Angular.js van MongoDB

  2. Kan Redis Cluster in Elasticache niet verbinden met PHP met behulp van de phpredis-bibliotheek

  3. Een duidelijke aggregatie van een matrixveld over indexen verkrijgen

  4. MongoDB - Maximale bestandsgrootte bij gebruik van GridFS