MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Shard nach Datum auf einem einzelnen Computer

Technisch gesehen müssen Sie Ihren Inhalt nicht fragmentieren und müssen nur Ihr Feld indizieren. Ja, Sie können einen Index für das Datumsfeld erstellen und es würde respektiert, was Sie sehen können, indem Sie den Abfrageplan db.collection.explain("executionStats") besuchen

Die Auswahl eines Shard-Schlüssels ist jedoch sehr wichtig. Bei der Auswahl des Shard-Schlüssels sind einige Dinge zu beachten

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

Die Wahl des Datumsfelds ergibt tatsächlich eine sehr hohe Kardinalität, es scheitert jedoch bei der Randomisierung und infolgedessen werden alle Dokumente in einem einzigen Shard gespeichert, wodurch die Schreibkapazität des Systems begrenzt wird. Aus demselben Grund wird davon abgeraten, ObjectId als Shard-Schlüssel zu verwenden.

http://docs.mongodb.org/manual/core/sharding- Shard-Schlüssel/ Inhalt vom obigen Link.."MongoDB generiert ObjectId-Werte bei der Dokumenterstellung, um eine eindeutige Kennung für das Objekt zu erzeugen. Die wichtigsten Datenbits in diesem Wert stellen jedoch einen Zeitstempel dar, was bedeutet, dass sie in a regelmäßiges und vorhersagbares Muster.Obwohl dieser Wert eine hohe Kardinalität hat, speichern alle Einfügevorgänge Daten in einem einzelnen Block und daher in einem einzelnen Shard, wenn Sie dieses, ein beliebiges Datum oder eine andere monoton ansteigende Zahl als Shard-Schlüssel verwenden Folglich definiert die Schreibkapazität dieses Shards die effektive Schreibkapazität des Clusters."