TL;DR:Le stringhe sono probabilmente le più sicure scelta e la differenza di prestazioni dovrebbe essere trascurabile. I numeri interi hanno senso per raccolte enormi in cui l'enumerazione deve essere indicizzata. YMMV.
Vero.
Questo è un vantaggio chiave degli interi secondo me. Tuttavia, richiede anche di verificare i valori associati di enum
non cambiare. Se sbagli, quasi sicuramente provocherai il caos , che è un enorme svantaggio.
Se stai effettivamente utilizzando un tipo di dati enum, è probabilmente una sorta di intero internamente, quindi il numero intero dovrebbe richiedere meno elaborazione. In ogni caso, quel sovraccarico dovrebbe essere trascurabile.
Sto ripetendo molto di ciò che è stato detto, ma forse questo aiuta gli altri lettori. Riassumendo:
- Confondere la mappa dei valori enum crea il caos. Immagina il tuo
Declined
gli stati vengono improvvisamente interpretati comeAccepted
, perchéDeclined
aveva il valore '2' e ora èAccepted
perché hai riordinato l'enumerazione e hai dimenticato di assegnare i valori manualmente... (brividi ) - Le stringhe sono più espressive
- Gli interi occupano meno spazio. Lo spazio su disco non ha importanza, di solito, ma lo spazio dell'indice consumerà RAM, il che è costoso.
- Gli aggiornamenti di interi non ridimensionano l'oggetto. Le stringhe, se le loro lunghezze variano notevolmente, potrebbero richiedere una riallocazione. Tuttavia, il riempimento delle stringhe e il fattore di riempimento dovrebbero alleviarlo.
- I numeri interi possono essere flag (non ancora interrogabili (ancora), sfortunatamente, vedere SERVER-3518 )
- Gli interi possono essere interrogati da
$gt
/$lt
così puoi implementare in modo efficiente$or
complessi query, anche se questo è un requisito piuttosto arcano e non c'è niente di sbagliato in$or
domande...