sql >> Database >  >> NoSQL >> MongoDB

MongoDB:miljarden documenten in een collectie

Het is moeilijk te zeggen wat de optimale bulkinvoeging is - dit hangt gedeeltelijk af van de grootte van de objecten die u invoegt en andere onmetelijke factoren. Je zou een paar reeksen kunnen proberen en kijken wat je de beste prestaties geeft. Als alternatief gebruiken sommige mensen mongoimport, wat behoorlijk snel is, maar je importgegevens moeten json of csv zijn. Er is duidelijk mongorestore, als de gegevens in BSON-formaat zijn.

Mongo kan gemakkelijk miljarden documenten verwerken en kan miljarden documenten in één verzameling hebben, maar onthoud dat de maximale documentgrootte is 16 MB . Er zijn veel mensen met miljarden documenten in MongoDB en er zijn veel discussies over op de MongoDB Google-gebruikersgroep . Hier is een document over het gebruik van een groot aantal verzamelingen die u misschien graag wilt lezen, als u van gedachten verandert en in plaats daarvan meerdere verzamelingen wilt hebben. Hoe meer collecties je hebt, hoe meer indexen je ook zult hebben, wat waarschijnlijk niet is wat je wilt.

Hier is een presentatie van Craigslist over het invoegen van miljarden documenten in MongoDB en de blogpost .

Het lijkt erop dat sharding een goede oplossing voor je zou zijn, maar meestal wordt sharding gebruikt voor het schalen over meerdere servers en veel mensen doen het omdat ze hun schrijfbewerkingen willen schalen of omdat ze hun werkset (gegevens en indexen) niet kunnen behouden. in RAM-geheugen. Het is volkomen redelijk om te beginnen met een enkele server en vervolgens naar een shard of replicaset te gaan als uw gegevens groeien of u extra redundantie en veerkracht nodig heeft.

Er zijn echter andere gebruikers die meerdere mongoden gebruiken om de vergrendelingslimieten van een enkele mongod met veel schrijfacties te omzeilen. Het is duidelijk, maar toch de moeite waard om te zeggen, maar een installatie met meerdere mongoden is complexer om te beheren dan een enkele server. Als uw IO of cpu hier niet maximaal is, uw werkset kleiner is dan RAM en uw gegevens gemakkelijk in balans te houden (vrij willekeurig verdeeld), zou u verbetering moeten zien (met sharding op een enkele server). Als een FYI is er potentieel voor geheugen- en IO-conflicten. Met 2.2 verbeterde gelijktijdigheid met db vergrendelen , vermoed ik dat er veel minder reden zal zijn voor een dergelijke inzet.

U moet uw overstap naar sharding goed plannen, d.w.z. goed nadenken over het kiezen van uw shardsleutel. Als je deze kant op gaat, kun je het beste vooraf splitsen en de balancer uitschakelen. Het zal contraproductief zijn om gegevens te verplaatsen om de zaken in evenwicht te houden, wat betekent dat u van tevoren moet beslissen hoe u het gaat splitsen. Bovendien is het soms belangrijk om uw documenten te ontwerpen met het idee dat een veld nuttig zal zijn voor sharding op of als primaire sleutel.

Hier zijn enkele goede links -



  1. MongoDB NodeJS-proces vol geheugen

  2. Laravel 5 Welsprekende som van vermenigvuldigde kolommen voor mongo DB

  3. Kan geen documenten vinden die op ObjectId zoeken met Mongoose

  4. MongoDB - CSV importeren in genest document