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

Ydeevnepåvirkning af indeksdatatype i MongoDB?

Et heltalsværdilagerkrav er mindre, men selvfølgelig ikke særlig væsentligt. Sorterings-/indekseringsalgoritmen for et tal ville være lidt hurtigere end en streng normalt, men forskellen ville være ekstremt lille, da strengen også er meget kort.

Jeg ville ikke forvente en overbevisende præstationsforskel mellem de to. Hvis du planlægger at gemme IPV6-adresser, vil problemet være, at BSON (http://bsonspec.org/ #/specifikation ) har ikke en simpel datatype til lagring af et 16-byte-tal, så det er ikke nødvendigvis naturligt kun at gemme som et tal.

I sidste ende vil jeg sandsynligvis bare bruge strenge, hvis du vil undgå at lave oversættelse fra lager til skærm, eller hvis du vil gøre forespørgsler mere naturlige at skrive for de fleste af os :) :

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

Hvis du bruger strenge, vil jeg også foreslå, at du overvejer at gemme som en streng med fast format, såsom 192.168.001.001 hvis du vil lave mere komplekse søgninger, såsom en rækkeviddesøgning. Da en streng gemt med et konsekvent fast format vil sortere naturligt, kan du bruge den på flere måder, end du ellers ville være i stand til. Hvis intervaller ikke er vigtige, er det ikke nødvendigt at gemme på denne måde.

Med et fast format kan du lave en forespørgsel som:

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

Det ville finde alle IP-adresser mellem (inklusive) 192.168.0.0 og 192.168.0.255 .

Ideelt set vil du have et indeks på feltet på begge måder:

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



  1. Redis under klassisk ASP(VBScript)

  2. MongoDB forEach()

  3. Sådan fjerner du alle elementer fra en MongoDB-samling

  4. Giver Mongoose adgang til tidligere værdi af ejendom i pre('save')?