验证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 大写字母的表现要好于数字的表现,差距在百分之几至十几之间。

仅供参考之用。

广告
将在 10 秒后关闭
bannerAds