Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance MongoDB中索引数据类型对性能的影响?_Performance_Mongodb_Indexing - Fatal编程技术网

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

Performance MongoDB中索引数据类型对性能的影响?,performance,mongodb,indexing,Performance,Mongodb,Indexing,我需要一个新的Mongo集合,该集合将数据与IP地址关联,该地址是集合密钥。我想知道使用IP地址的十进制表示法(例如,3299551096作为整数)而不是虚线表示法(例如,“198.252.206.16”作为字符串)是否有性能优势 我没有发现任何支持或反对的证据,也没有发现整数索引和字符串索引之间的性能比较。有什么理由选择其中一种而不是另一种吗?整数值存储需求较小,但当然不是很重要。数字的排序/索引算法通常比字符串快一点,但差别非常小,因为字符串也很短 我不希望两者之间有令人信服的性能差异。如果

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


我没有发现任何支持或反对的证据,也没有发现整数索引和字符串索引之间的性能比较。有什么理由选择其中一种而不是另一种吗?

整数值存储需求较小,但当然不是很重要。数字的排序/索引算法通常比字符串快一点,但差别非常小,因为字符串也很短

我不希望两者之间有令人信服的性能差异。如果您计划存储IPV6地址,那么问题将是BSON()没有一个简单的数据类型来存储16字节的数字,因此它不一定自然地适合只存储为一个数字

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

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

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

db.ips.find({ addr: {
                 $gte: "192.168.000.000",
                 $lte: "192.168.000.255" } })
这将找到介于(包括)192.168.0.0和192.168.0.255之间的所有IP地址

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

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

一个不同之处在于查询,在int上进行范围搜索比在string上进行范围搜索更容易?为什么?如果地址存储一致,则不会出现任何问题。也许这就是问题所在。应该是
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。字符串格式通常意味着你需要使用正则表达式,这是我想到的。我添加了一条关于固定格式的评论。我不认为在大多数情况下都需要正则表达式。那我们就用字符串索引吧。没有想过固定格式。我不需要范围查询,但你永远不知道会发生什么。
db.ips.ensureIndex({ addr: 1 })