TL;DR:字符串可能是safer种 Select ,性能差异应该可以忽略不计.整数对于必须对枚举进行索引的大型集合是有意义的.YMMV.
我曾考虑过使用整数来存储它,我认为对于所有可以轻松表示为整数的内容,使用整数比存储字符串占用更少的空间
符合事实的
我看到使用整数的另一个好处是,如果我想重命名一项成就或排名,我可以轻松地更改它,甚至不必触碰数据库.
在我看来,这是整数的一个主要优点.但是,它还要求您确保enum
的关联值不会更改.如果你搞砸了,你会受伤,这是一个巨大的劣势.
我认为使用字符串的一个好处是,数据在使用前需要更少的处理
如果您实际使用的是枚举数据类型,那么它在内部可能是某种整数,因此整数应该需要更少的处理.不管怎样,这种开销应该可以忽略不计.
是否有充分的理由使用整数或字符串?
我重复了很多已经说过的话,但这可能对其他读者有所帮助.总结:
- 混合使用枚举值映射会造成严重 destruct .想象一下,你的
Declined
个状态突然被解释为Accepted
,因为Declined
的值为"2",而现在是Accepted
,因为你重新排列了枚举的顺序,忘记了手动赋值...(shudders)
- 弦更有表现力
- 整数占用的空间更少.磁盘空间通常并不重要,但索引空间会消耗昂贵的RAM.
- 整数更新不会调整对象的大小.如果字符串的长度变化很大,可能需要重新分配.不过,字符串填充和填充因子应该可以缓解这种情况.
- 整数可以是标志(尚不可查询,不幸的是,请参见SERVER-3518)
- 整数可以通过
$gt
/$lt
查询,因此您可以高效地实现复杂的$or
查询,尽管这是一个相当神秘的要求,$or
查询没有任何问题...