sql >> Database >  >> NoSQL >> MongoDB

MongoDB-shard op datum op één machine

Technisch gezien hoeft u uw inhoud niet te sharden en hoeft u alleen uw veld te indexeren. Ja, u kunt een index maken op het datumveld en dit wordt gerespecteerd, wat u kunt zien door het queryplan db.collection.explain("executionStats") te bezoeken

Het kiezen van een Shard-sleutel is echter erg belangrijk. er zijn een paar dingen waarmee u rekening moet houden bij het kiezen van de Shard-sleutel

- Write scaling (high cardinality, Randomization)
- Query Isolation. (read)

het kiezen van het datumveld geeft eigenlijk een zeer hoge kardinaliteit, maar het faalt in het uitvoeren van de randomisatie en als gevolg daarvan worden alle documenten opgeslagen in de enkele shard en daarom beperkt het de schrijfcapaciteit van het systeem. Om dezelfde reden wordt het gebruik van ObjectId als de Shard-sleutel afgeraden.

http://docs.mongodb.org/manual/core/sharding- shard-key/ Inhoud van de bovenstaande link.."MongoDB genereert ObjectId-waarden bij het maken van het document om een ​​unieke identificatie voor het object te produceren. De meest significante gegevensbits in deze waarde vertegenwoordigen echter een tijdstempel, wat betekent dat ze in een regelmatig en voorspelbaar patroon. Ook al heeft deze waarde een hoge kardinaliteit, bij gebruik van deze, een willekeurige datum of een ander monotoon toenemend getal als de shard-sleutel, slaan alle invoegbewerkingen gegevens op in een enkel blok, en dus een enkele scherf. als resultaat zal de schrijfcapaciteit van deze shard de effectieve schrijfcapaciteit van het cluster bepalen."



  1. Waarom neemt de database van een Meteor-app die eenmaal is uitgevoerd (en nooit is geladen) bijna 3 GB in beslag?

  2. Stel meerdere velden in met één updatequery

  3. Vergelijk ingesloten document met bovenliggend veld met mongoDB

  4. MongoDb c#-stuurprogramma zoek item in array op veldwaarde