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

Memorizza enum MongoDB

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 come Accepted , 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...