mongo查询谨记知识点

项目生产日志太大,通过消息队列 + mongodb转移日志到mongo数据库

在查询mongo数据库发现应用总会发现各种的 read timeout。经过咨询和网络查询各种资料。优化做一个知识总结

大概分几个点简单讲述一下。

一、nosql数据库 不同于关系型数据库。在查询时候我们不需要遵循关系型数据库的第一范式第二。。。。在查询时候nosql数据库的索引只能命中一个,这是单个索引的情况下。如果在一个同类型集合里面的数据做索引,尽量采用复合索引。可以利用工具,也可以用命令方式。执行命令后 数据库会重构索引。次过程耗时根据数据量大小变化而变化。

二、所需要增加索引的列不允许有null值存在。如果有null值得存在那么索引将会全表去扫描。索引将不会生效。

三、复合索引是推荐的索引,但是索引的怎么才是最优的请不要参照网络上的类似关系型数据库左前缀。在设置索引应该是通过更换索引顺序来找到对我们项目最优的查询索引

四、能不能进行count命令在应用里面尽量避免,如果需要请在count查询增加条件(条件需要有索引)。这点可以去做一个测试。测试结果很惊人的

五、 如果需要做时间段的查询,请增加时间字段。设定一个场景,需要以天为单位的时间段查询 需要查询2017-07-20 到 2017-07-23日时间内的内容。增加时间字段timeDay 并在字段上做上索引。每条数据都存入这个字段值,时间精确到天。(上面我也讲过nosql不是关系型数据库,不遵循范式)

六、在集合命名上不要以数字开头或者纯数字来命名。会出现一些意外的状况发生





注意:mongo数据库并没有自己的内存管理机制,他的内存管理都是基于系统的内存管理。默认mongo数据库的最大内存是系统的 40% - 50%。之后就不会再增加内存。

索引再搭建mongodb服务时,最好是只部署mongodb到服务器上,不在部署其他应用或者软件,避免内存的问题出现。






未完待续

猜你喜欢

转载自blog.csdn.net/qq_35809876/article/details/75913262