TL;DR:Strings sind wahrscheinlich die sichereren Auswahl, und der Leistungsunterschied sollte vernachlässigbar sein. Ganzzahlen sind sinnvoll für große Sammlungen, in denen die Aufzählung indiziert werden muss. YMMV.
Stimmt.
Dies ist meiner Meinung nach ein wesentlicher Vorteil von ganzen Zahlen. Es erfordert jedoch auch, dass Sie die zugehörigen Werte der enum
sicherstellen nicht ändern. Wenn Sie das vermasseln, werden Sie mit ziemlicher Sicherheit Chaos anrichten , was ein großer Nachteil ist.
Wenn Sie tatsächlich einen Enum-Datentyp verwenden, handelt es sich wahrscheinlich intern um eine Art Ganzzahl, sodass die Ganzzahl weniger Verarbeitung erfordern sollte. In jedem Fall sollte dieser Overhead vernachlässigbar sein.
Ich wiederhole vieles von dem, was gesagt wurde, aber vielleicht hilft das anderen Lesern. Fazit:
- Das Verwechseln der Enum-Wert-Map richtet Chaos an. Stellen Sie sich Ihre
Declined
vor Zustände werden plötzlich alsAccepted
interpretiert , weilDeclined
hatte den Wert '2' und ist jetztAccepted
weil Sie die Aufzählung neu geordnet und vergessen haben, Werte manuell zuzuweisen ... (schaudert ) - Strings sind ausdrucksstärker
- Ganzzahlen nehmen weniger Platz ein. Festplattenspeicher spielt normalerweise keine Rolle, aber der Indexspeicher verbraucht RAM, was teuer ist.
- Ganzzahlaktualisierungen ändern die Größe des Objekts nicht. Zeichenfolgen, deren Längen stark variieren, erfordern möglicherweise eine Neuzuweisung. String padding und padding factor sollten dies jedoch lindern.
- Ganzzahlen können Flags sein (noch (noch) nicht abfragbar, leider, siehe SERVER-3518 )
- Ganzzahlen können mit
$gt
abgefragt werden /$lt
damit Sie komplexe$or
effizient implementieren können Abfragen, obwohl dies eine ziemlich obskure Anforderung ist und an$or
nichts auszusetzen ist Anfragen...