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

Opbevar enum MongoDB

TL;DR:Strenge er nok det sikrere valg, og præstationsforskellen bør være ubetydelig. Heltal giver mening for enorme samlinger, hvor enumet skal indekseres. YMMV.

Sandt.

Dette er en vigtig fordel ved heltal efter min mening. Det kræver dog også, at du sørger for de tilknyttede værdier af enum ikke ændre sig. Hvis du ødelægger det, vil du næsten helt sikkert skabe kaos , hvilket er en kæmpe ulempe.

Hvis du rent faktisk bruger en enum-datatype, er det sandsynligvis en slags heltal internt, så heltalet burde kræve mindre behandling. Uanset hvad, skulle denne overhead være ubetydelig.

Jeg gentager meget af det, der er blevet sagt, men måske hjælper det andre læsere. Opsummering:

  • At blande enum-værdikortet skaber kaos. Forestil dig din Declined tilstande fortolkes pludselig som Accepted , fordi Declined havde værdien '2' og nu er den Accepted fordi du omarrangerede enummet og glemte at tildele værdier manuelt... (gyser )
  • Strenge er mere udtryksfulde
  • Heltal tager mindre plads. Diskplads betyder normalt ikke noget, men indeksplads vil æde RAM, hvilket er dyrt.
  • Heltalsopdateringer ændrer ikke størrelsen på objektet. Strenge, hvis længden varierer meget, kan kræve en omfordeling. Strengpolstring og polstringsfaktor bør dog afhjælpe dette.
  • Heltal kan være flag (endnu ikke til forespørgsel), se desværre SERVER-3518 )
  • Heltal kan forespørges af $gt / $lt så du effektivt kan implementere komplekse $or forespørgsler, selvom det er et ret mystisk krav, og der er intet galt med $or forespørgsler...



  1. MongoDB Java pull

  2. Hvordan får man den nye værdi tilbage efter en opdatering i et indlejret array?

  3. sparsomme indekser og nulværdier i mongo

  4. MapReduce ser ud til at være begrænset til 100?