验证MongoDB时间戳列在Binary(unixtime)和ASCII格式下的差异
我想确认一下,在MongoDB中,将时间戳列转换为二进制(Unix时间)和ASCII字符串会对索引大小和查询性能产生影响。
注册数据
(Binary ケース)
mongodb> db.test11.findOne()
{
"h" : {
"t" : 1400000000,
"n" : "host0001",
"i" : "item0001"
},
"d" : [
{
"p" : "parameter0001",
"v" : 1.1
},
{
"p" : "parameter0002",
"v" : 2.2
},
{
"p" : "parameter0003",
"v" : 3.3
}
]
}
(ASCII ケース)
mongodb> db.test12.findOne()
{
"h" : {
"t" : "1400000000",
"n" : "host0001",
"i" : "item0001"
},
"d" : [
{
"p" : "parameter0001",
"v" : 1.1
},
{
"p" : "parameter0002",
"v" : 2.2
},
{
"p" : "parameter0003",
"v" : 3.3
}
]
}
查询
(Binary ケース)
mongodb> db.test11.find({'h.t':{'$gte':1400000000,'$lte':14000086400}}).explain()
(ASCII ケース)
mongodb> db.test12.find({'h.t':{'$gte':'1400080000','$lte':'1400082000'}}).explain()
结果 (jié guǒ)
索引大小(MB)
データ数Binary ケースASCII ケース100000024262000000475310000000239268
查询性能(毫秒)
发出数次查询,从索引和数据已装载到内存中的状态开始测量。
查询(1%)
データ数Binary ケースASCII ケース100000000200000011100000007365
查询 (2%)
データ数Binary ケースASCII ケース10000001120000002210000000145133
查询(5%)
データ数Binary ケースASCII ケース10000003320000007610000000357323
注意到
索引大小,ASCII 大小写更大。
查询性能方面,ASCII 大写字母的表现要好于数字的表现,差距在百分之几至十几之间。
仅供参考之用。