繁体   English   中英

MongoDB中索引数据类型的性能影响?

[英]Performance impact of index datatype in MongoDB?

我需要一个新的Mongo集合,它将数据与IP地址相关联,该地址是集合密钥。 我想知道使用IP地址的十进制表示法(例如3299551096作为整数)而不是点分表示法(例如"198.252.206.16"作为字符串)是否有任何性能优势。

我没有找到任何证据支持或反对,也没有在整数和字符串索引之间进行任何性能比较。 有什么理由比较喜欢一个吗?

整数值存储要求较小,但当然不是很重要。 数字的排序/索引算法通常会比字符串快,但由于字符串也很短,因此差异非常小。

我不希望两者之间产生令人信服的性能差异。 如果您计划存储IPV6地址,问题将是BSON( http://bsonspec.org/#/specification )没有用于存储16字节数字的简单数据类型,因此它不一定是自然适合仅作为数字存储。

最后,如果你想避免从存储转换到屏幕,或者你想让查询更自然地为我们大多数人写:)我可能只是使用字符串:):

db.ips.find({addr: "192.168.1.1"})

如果使用字符串,我还建议您考虑存储为固定格式字符串,如192.168.001.001如果您想进行更复杂的搜索,例如范围搜索。 由于以一致的固定格式存储的字符串会自然排序,因此您可以以比其他方式更多的方式使用它。 如果范围不重要,则无需以此方式存储。

使用固定格式,您可以执行以下查询:

db.ips.find({ addr: {
                 $gte: "192.168.000.000",
                 $lte: "192.168.000.255" } })

这将找到(包括) 192.168.0.0192.168.0.255之间的所有IP地址。

理想情况下,您将在该字段上有一个索引:

db.ips.ensureIndex({ addr: 1 })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM