sql >> Databasteknik >  >> NoSQL >> MongoDB

Prestandapåverkan av indexdatatyp i MongoDB?

Ett heltalsvärdelagringskrav är mindre, men naturligtvis inte särskilt betydande. Sorterings-/indexeringsalgoritmen för ett nummer skulle vara något snabbare än en sträng normalt, men skillnaden skulle vara extremt liten eftersom strängen också är väldigt kort.

Jag skulle inte förvänta mig en övertygande prestandaskillnad mellan de två. Om du planerar att lagra IPV6-adresser kommer problemet att vara att BSON (http://bsonspec.org/ #/specifikation ) har inte en enkel datatyp för att lagra ett 16-byte nummer, så det är inte nödvändigtvis naturligt att lagra endast som ett nummer.

I slutändan skulle jag förmodligen bara använda strängar om du vill undvika att översätta från lagring till skärm, eller om du vill göra frågor mer naturliga att skriva för de flesta av oss :) :

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

Om du använder strängar, skulle jag också föreslå att du överväger att lagra som en sträng med fast format, till exempel 192.168.001.001 om du vill göra mer komplexa sökningar, till exempel en intervallsökning. Eftersom en sträng som lagras med ett konsekvent fast format kommer att sorteras naturligt, kan du använda den på fler sätt än du annars skulle kunna. Om intervallen inte är viktiga är det inte nödvändigt att lagra på detta sätt.

Med ett fast format kan du göra en fråga som:

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

Det skulle hitta alla IP-adresser mellan (inklusive) 192.168.0.0 och 192.168.0.255 .

Helst har du ett index på fältet på båda håll:

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



  1. Hur man tar bort N antal dokument i mongodb

  2. MongoDB:Calling Count() kontra spårningsantal i en samling

  3. $push med positionell ($) i upsert misslyckas

  4. Behöver node.js-servern internetanslutning för att köras?