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

Auswirkungen auf die Leistung des Indexdatentyps in MongoDB?

Eine Speicheranforderung für einen ganzzahligen Wert ist kleiner, aber natürlich nicht sehr bedeutend. Der Sortier-/Indexalgorithmus für eine Zahl wäre leicht schneller als eine Saite normalerweise, aber der Unterschied wäre extrem gering, da die Saite auch sehr kurz ist.

Ich würde keinen überzeugenden Leistungsunterschied zwischen den beiden erwarten. Wenn Sie vorhaben, IPV6-Adressen zu speichern, besteht das Problem darin, dass BSON (http://bsonspec.org/ #/Spezifikation ) hat keinen einfachen Datentyp zum Speichern einer 16-Byte-Zahl, daher ist es nicht unbedingt selbstverständlich, nur als Zahl zu speichern.

Am Ende würde ich wahrscheinlich nur Zeichenfolgen verwenden, wenn Sie eine Übersetzung vom Speicher zum Bildschirm vermeiden möchten oder wenn Sie das Schreiben von Abfragen für die meisten von uns natürlicher gestalten möchten :) :

db.ips.find({addr: "192.168.1.1"})

Wenn Sie Zeichenfolgen verwenden, empfehle ich Ihnen auch, die Speicherung als Zeichenfolge mit festem Format wie 192.168.001.001 in Erwägung zu ziehen wenn Sie komplexere Suchen durchführen möchten, z. B. eine Bereichssuche. Da eine Zeichenfolge, die mit einem konsistenten festen Format gespeichert ist, auf natürliche Weise sortiert wird, können Sie sie auf mehr Arten verwenden, als Sie es sonst könnten. Wenn Bereiche nicht wichtig sind, ist es nicht erforderlich, auf diese Weise zu speichern.

Mit einem festen Format könnten Sie eine Abfrage wie folgt durchführen:

db.ips.find({ addr: {
                 $gte: "192.168.000.000",
                 $lte: "192.168.000.255" } })

Das würde alle IP-Adressen zwischen (einschließlich) 192.168.0.0 finden und 192.168.0.255 .

Idealerweise haben Sie so oder so einen Index für das Feld:

db.ips.ensureIndex({ addr: 1 })