mongo db 1.4.1
2个集合,相同的数据,但对字段“x”使用不同的数据类型(foo - string,bar - number):
> db.foo.ensureIndex({x:1});
> db.bar.ensureIndex({x:1});
> db.foo.stats();
{
"ns" : "impressions.foo",
"count" : 50000,
"size" : 23519184,
"avgObjSize" : 470.38368,
"storageSize" : 37797888,
"numExtents" : 8,
"nindexes" : 2,
"lastExtentSize" : 15290368,
"paddingFactor" : 1,
"systemFlags" : 0,
"userFlags" : 0,
"totalIndexSize" : 2526384,
"indexSizes" : {
"_id_" : 1463504,
"x_1" : 1062880
},
"ok" : 1
}
> db.bar.stats()
{
"ns" : "impressions.bar",
"count" : 50000,
"size" : 21594256,
"avgObjSize" : 431.88512,
"storageSize" : 22507520,
"numExtents" : 7,
"nindexes" : 2,
"lastExtentSize" : 11325440,
"paddingFactor" : 1,
"systemFlags" : 0,
"userFlags" : 0,
"totalIndexSize" : 2730784,
"indexSizes" : {
"_id_" : 1463504,
"x_1" : 1267280
},
"ok" : 1
}
x_1在案例2中更大,而你会期望相反吗?
答案 0 :(得分:0)
索引中的int值(或long)在mongodb中存储为double,我猜是8字节。因此,与字符串值相比,这可能是索引大小较大的原因。
检查源代码。 https://github.com/mongodb/mongo/blob/v2.2/src/mongo/db/key.cpp#L312
答案 1 :(得分:0)
整数存储为bson类型16,它是32位整数。如果整数是一个分类值,您可以存储一个只有一个字符长的字符串,它应该只是8位(UTF-8字符串)。