我执行了一个小基准测试,我将 252 行数据从 Excel 上传到两个集合 testShortNames 和 testLongNames,如下所示:
长名称:
{
"_id": ObjectId("6007a81ea42c4818e5408e9c"),
"countryNameMaster": "Andorra",
"countryCapitalNameMaster": "Andorra la Vella",
"areaInSquareKilometers": 468,
"countryPopulationNumber": NumberInt("77006"),
"continentAbbreviationCode": "EU",
"currencyNameMaster": "Euro"
}
简称:
{
"_id": ObjectId("6007a81fa42c4818e5408e9d"),
"name": "Andorra",
"capital": "Andorra la Vella",
"area": 468,
"pop": NumberInt("77006"),
"continent": "EU",
"currency": "Euro"
}
然后我得到了每个文件的统计数据,保存在磁盘文件中,然后对两个文件进行了“差异”:
pprint.pprint(db.command("collstats", dbCollectionNameLongNames))
下图显示了两个感兴趣的变量:size 和 storageSize。
我的阅读表明 storageSize 是压缩后使用的磁盘空间量,基本上 size 是未压缩的大小。所以我们看到 storageSize 是相同的。显然,Wired Tiger 引擎很好地压缩了字段名。
然后我运行一个程序从每个集合中检索所有数据,并检查响应时间。
即使是亚秒级查询,长名称的查询时间也始终增加了大约 7 倍。当然,将较长的名称从数据库服务器发送到客户端程序需要更长的时间。
-------LongNames-------
Server Start DateTime=2021-01-20 08:44:38
Server End DateTime=2021-01-20 08:44:39
StartTimeMs= 606964546 EndTimeM= 606965328
ElapsedTime MilliSeconds= 782
-------ShortNames-------
Server Start DateTime=2021-01-20 08:44:39
Server End DateTime=2021-01-20 08:44:39
StartTimeMs= 606965328 EndTimeM= 606965421
ElapsedTime MilliSeconds= 93
在 Python 中,我只是执行了以下操作(我实际上必须循环遍历项目以强制读取,否则查询仅返回光标):
results = dbCollectionLongNames.find(query)
for result in results:
pass