• Mongodb性能优化


    项目中使用到了mongdb,在小数据量时,和关系型数据库一样,看不出任何问题。当数据的操作变的频繁,如对10万级的数据表连续进行查询操作,mongdb会变的非常缓慢。

    到底是什么原因呢?

    这是spring版本的mongdb操作,spring的MongoTemplate只是对源生方法的一些封装,如果spring环境下有这些问题,直接使用源生方法进行的数据操作也会产生同样的问题。

    下面是我的优化过程:

    1.建立索引,索引对mongdb的查询速度影响非常大,mongdb索引建立的方法网上有很多,我这里举一个实际的例子:

    有个数据表叫Student,该表中name、age属性被用作查询条件,其中name被使用的频率非常大,age在特定的地方会和name同时作为查询条件,age几乎不会单独作为查询条件。

    索引建立过程如下:

    db.Student.ensureIndex({ "name" : 1, "age" : -1 },{ "name" : "name_age_index" });

    如果使用MongoVUE客户端软件的话,直接添加索引输入:{ "name" : 1, "age" : -1 }即可。

    最后记得建立索引后不要随便drop表。

    2.优化代码,方法使用不当会显著影响mongdb性能,这里我列举一下我的使用经验:

    a.单纯的更新数据操作使用 mongoTemplate.updateFirst() 或者mongoTemplate.updateMulti()代替mongoTemplate.findAndModify();

    b.单纯的新增数据操作使用 mongoTemplate.insert()代替 mongoTemplate.save();

    c.查询1条数据使用 mongoTemplate.findOne()代替 mongoTemplate.find()后遍历数据;

    d.查询数据时注意数据量,如果使用mongoTemplate.find()的结果集过大,如10万100万,则数据会积压在内存中,这是非常危险的,尽量使用limit方法限制条数。

    3.谨慎选择是否使用mongdb,在我们的项目使用过程中,确确实实的发现一些问题。选择使用Mongodb使要考虑服务器配置,因为Mongodb对内存是无限贪婪的,如果只有2G内存的服务器,还要运行其他服务等,部署Mongodb的话处理小数据量还是可以的,进行大量的数据处理是不适合的。在我看来使用NOSQL就是可以花最少的钱处理更多的数据量,并且对数据的安全性不是非常看重的情况,比如允许数据丢失,或者无法处理事务等情况。如果对数据安全性要求较高的情形下,建议慎重考虑。

  • 相关阅读:
    【WP开发】WebView控件应用要点
    【WP开发】认清“不透明度”与“可见性”的区别
    分享:自学编程的方法
    <C#>找出数组中重复次数最多的数值
    【WP 8.1开发】上下文菜单
    【WP 8.1开发】同时更新多种磁贴
    【WP开发】如何处理溢出的文本
    lnmp/nginx系统真正有效的图片防盗链完整设置详解
    PHP自动加载SPL的四种处理方式
    算法笔记-判断链表保存的字符串是否是回文
  • 原文地址:https://www.cnblogs.com/zhishan/p/2762594.html
Copyright © 2020-2023  润新知