1.我们的业务场景下存储在mongodb 的数据是中有一个属性字段很大,2000多位的int型数组,mongodb统计显示平均记录大小是21kb左右(AverageObjecrSize是21000),我们的业务场景数据量又很大,但是我验证了去除这个字段的话,平均大小就会降低到1kb左右。按照1亿的数据规模计算,前者相当于是20K*1亿是2TB,后者缩小了约20倍是100GB,因为Mongodb会占用大量内存,缓存热数据。按照每条记录20K的情况,如果有100G的内存用于缓存数据,只能缓存500万,约5%的数据。按照1K计算就可以缓存约全部数据了。当然查询性能还和索引以及诸多因素相关。但是我想问的是单条记录大小对应查询这块到底是否有影响,就内存和记录大小这2个因素来说的话,我这样的理解是否正确。请指教。
有一定道理,但不完全正确。离开实际情况谈性能都是在耍流氓。
不是MongoDB,所有数据库都是这样的策略。所以结果就是,如果所有数据都能放进内存中,肯定是性能最好的情况,因为所有读操作不需要等待磁盘,会明显地快很多。但是实际情况是,并不是所有场景下都可以把全部数据都塞进内存里。那么退而求其次,就会要求所有索引在内存中,数据能缓存多少算多少,没有的就从磁盘读。虽然不如前一种情况,但通常也是可以接受的,因为:
所以,多快算快?全部放进内存是很快不错,只把索引放在内存不见得不可接受(而且大部分时候是可以接受的)。从这个角度来说,文档大小对你的性能是有影响,但不见得有你想象的严重。因为每次读出来的只是很少量的数据。