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

Argumente für MongoDB-Hash-Indizes

Zusätzlich zu skalaren Indizes (aufsteigend, absteigend) unterstützt MongoDB auch „gehashte“ Indizes. Wenn Sie einen Hash-Index für ein Feld verwenden, berechnet MongoDB einen Hash des Feldwerts und speichert den Hash im Index. Hash-Indizes unterstützen nur Gleichheitsvergleiche und keine Bereichsabfragen und werden normalerweise in Sharding-Szenarien verwendet.

Erstellen eines MongoDB-Hash-Indexes

Sie können die folgende Syntax verwenden, um einen Hash-Index zu erstellen:

db.collection.ensureIndex({'field':'hashed'});

Sie können sowohl einen skalaren Index als auch einen Hash-Index für dasselbe Feld erstellen.

MongoDB-Sharding

Typischerweise wird das MongoDB-Sharding mithilfe einer „bereichsbasierten“ Partitionierung implementiert. Bei diesem Ansatz wird jedem Shard ein Wertebereich des Shard-Schlüssels zugewiesen. Wenn der Shard-Schlüssel wie Zeitstempel oder Objekt-ID monoton ansteigt, kann dies manchmal zu einem „heißen“ Shard führen, da die neuesten Werte immer an denselben Shard weitergeleitet werden.

Der Weg, dies zu umgehen, ist die Verwendung von „Hash-basierter Partitionierung“. Ein Hash des Shard-Schlüssels wird berechnet und dieser Hash-Wert wird anstelle des tatsächlichen Werts verwendet, um zu einem Shard zu leiten. Dadurch wird die Last gleichmäßig auf alle Shards verteilt, anstatt alle neuesten Daten an denselben Shard zu senden. Die Hash-basierte Partitionierung wird mithilfe von Hash-Indizes auf Ihrem Shard-Schlüssel implementiert. Weitere Informationen finden Sie in der Sharding-Dokumentation.

Vor- und Nachteile des gehashten Index

  • Vorteile

    Hash-Indexe sind in der Regel kleiner als Skalar-Indizes, da statt des vollständigen Schlüssels nur ein Hash des Schlüssels gespeichert wird. Z.B. In einem einfachen Test mit 100.000 Dokumenten haben wir gehashte und skalare Indizes zu einem Zeichenfolgenfeld hinzugefügt – „fieldName“. Wie unten gezeigt, ist der gehashte Index tendenziell erheblich kleiner als die skalaren Indizes:

    "indexSizes" : {
            "_id_" : 811008,
            "firstName_1" : 4415488,
            "firstName_hashed" : 1490944
    }
    
  • Nachteile

    Unterstützt keine Bereichsabfragen. Wenn Sie eine Bereichsabfrage für einen gehashten Index ausführen, führt dies zu einem Index-Scan.

Hashed-Indizes von MongoDB für Shards – Vor- und NachteileClick To Tweet

Hash-Indexbeschränkungen

    1. Hash-Indizes unterstützen keine Arrays.
    2. Hash-Indizes können keine zusammengesetzten Indizes sein.
    3. Sie können Hash-Indizes keine eindeutigen Beschränkungen hinzufügen.