我在 Mongo 数据库中存储每个用户的排名(管理员、版主、用户...)和成就等枚举。据我所知,Mongo 没有枚举数据类型,这意味着我必须使用其他类型来存储它。
我曾想过使用整数来存储它,我认为它比存储可以轻松表示为整数的所有内容的字符串占用的空间更少。我看到使用整数的另一个好处是,如果我想重命名一项成就或排名,我可以轻松更改它,甚至无需接触数据库。我认为使用字符串的一个好处是,数据在使用之前需要更少的处理,并且更具人类可读性,这可以帮助跟踪错误。
在 Mongo 中存储枚举有更好的方法吗?是否有充分的理由使用整数或字符串? (试图远离哪个更好的问题)
TL;DR:字符串可能是safer选择,并且性能差异应该可以忽略不计。整数对于必须对枚举进行索引的大型集合有意义。 YMMV。
我曾想过使用整数存储它,我认为它比存储可以轻松表示为整数的所有内容的字符串占用的空间更少
True.
我看到使用整数的另一个好处是,如果我想重命名一项成就或排名,我可以轻松更改它,甚至无需接触数据库。
我认为这是整数的一个关键好处。但是,它还要求您确保关联的值enum
不要改变。如果你搞砸了,你就会几乎肯定会造成严重破坏,这是一个巨大的劣势。
我认为使用字符串的一个好处是数据在使用之前需要较少的处理
如果您实际上使用枚举数据类型,它内部可能是某种整数,因此整数应该需要较少的处理。不管怎样,这种开销应该可以忽略不计。
是否有充分的理由使用整数或字符串?
我重复了很多内容,但这也许对其他读者有帮助。加起来:
- 混合枚举值映射会造成严重破坏。想象一下你的
Declined
状态突然被解释为Accepted
, 因为Declined
原来的值为“2”,现在是Accepted
因为您重新排序了枚举并忘记手动分配值...(shudders)
- 弦乐更具表现力
- 整数占用更少的空间。通常,磁盘空间并不重要,但索引空间会占用 RAM,这很昂贵。
- 整数更新不会调整对象的大小。如果字符串的长度变化很大,则可能需要重新分配。不过,字符串填充和填充因子应该可以缓解这种情况。
- 整数可以是标志(还不能查询,不幸的是,请参阅服务器-3518 https://jira.mongodb.org/browse/SERVER-3518)
- 整数可以通过以下方式查询
$gt
/ $lt
这样您就可以有效地实施复杂的$or
查询,尽管这是一个相当神秘的要求,并且没有什么问题$or
查询...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)