先来一个情景假设,假如一个文档中有很多结构,比如一个MM集合类,里面有A, B, C, D, E, F等字符串结构,然后我们主动存入了一定量的数据,此时有一个业务需求为获取某一个文档的信息,我们事先知道D的值为随机的字符串‘d34fd45f3’,当然我们也知道此要查找的文档的'_id'为‘523032cf21d7f7199037f467’。
理论上,如果使用‘_id’来查找的话会非常的快,因为id具有一定的顺序性,能够起到索引的作用,因此会很快定位到;而如果使用查找D的值的话,理论上是会进行扫表的行为,把整个集合都扫描一遍进行比较(除了这种方法我想不出还有其他方法),因此这种方法效率应该很低才是。
实际中,我通过添加数据的数据从10条,100条,1000条,10k条发现两种方法的操作时间上差不多,分别如下所示:
10条: by_id:0.00072243s by_str:0.00080101s
100条: by_id:0.00072503s by_str:0.00080418s
1000条:by_id:0.00073218s by_str:0.00078892s
10K条: by_id:0.00072598s by_str:0.00082588s
100K条:by_id:0.00125479s by_str:0.00142097s
只测试到10万条数据,再大怕本本撑不住,所以没测,不过通过以上数据观察到两者方式竟然花费的时间差不多,跟理论上预测不符,这就是我非常奇怪的原因。还请各位对mongodb有些经验的大牛开导一下,多谢了。
数据较少时,是全缓存到内存中的,这时的性能差异当然就很小了
单表5000万以下,并不是NOSQL的最佳应用场景。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。