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

MongoDB shard efter dato på en enkelt maskine

Teknisk set behøver du ikke at sønderdele dit indhold og skal blot indeksere dit felt. Ja, du kan oprette indeks på datofeltet, og det ville blive respekteret, hvilket du kan se ved at besøge forespørgselsplanen db.collection.explain("executionStats")

Det er dog meget vigtigt at vælge en shard-nøgle. der er få ting at overveje, når du vælger shard-nøglen

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

at vælge datofeltet giver faktisk en meget høj kardinalitet, men det mislykkes i at udføre randomiseringen, og som et resultat gemmes alle dokumenter i det enkelte skår, og det begrænser derfor systemets skrivekapacitet. Af samme grund frarådes ObjectId at bruge som shard-nøgle.

http://docs.mongodb.org/manual/core/sharding- shard-key/ Indhold fra ovenstående link.."MongoDB genererer ObjectId-værdier ved dokumentoprettelse for at producere en unik identifikator for objektet. De mest signifikante databits i denne værdi repræsenterer dog et tidsstempel, hvilket betyder, at de øges i en regelmæssigt og forudsigeligt mønster. Selvom denne værdi har høj kardinalitet, vil alle indsættelsesoperationer, når du bruger denne, en hvilken som helst dato eller et andet monotont stigende tal som shard-nøgle, gemme data i en enkelt del og derfor en enkelt shard. Som som et resultat, vil skrivekapaciteten af ​​denne shard definere den effektive skrivekapacitet for klyngen."



  1. TypeError:db.collection er ikke en funktion

  2. Hvad er outputtet af en filstrøm?

  3. Hvis Mongo $lookup er en venstre ydre joinforbindelse, hvorfor udelukker den så ikke-matchende dokumenter?

  4. grupper efter dag/måned og tag gennemsnittet af rating på den dag/måned i mongo