MongoDB选型及注意问题点

来源:互联网 发布:知乎 一个好用的书桌 编辑:程序博客网 时间:2024/04/27 16:47

    NoSQL和RDMS的争论,一直都是沸沸扬扬,可是站在我们普通的企业应用角度,应该注意些什么呢?本文将针对该问题进行讨论。

    1、传统的RDMS在大型的系统应用中,经常成为系统瓶颈。应运而生的NoSQL,很大程度的弥补了RDMS的弊端,无形中给我们带来了更多的希望。作为技术选型的决策者,必须有一个清醒的认识:明确系统的应用场景,清楚需求;辩证的看待RDMS和NoSQL的关系,充分发挥各自优势,最大限度的为系统服务。

 

    2、本节不过多的介绍RDMS,针对最为流行的NoSQL--MongoDB,介绍其使用场景

    2.1、Web应用程序。文档能表示丰富的数据结构,建模相同数据库所需的集合数量通常会比使用完全正规化关系型数据库的数据表数量要少。动态查询和二级索引能让你轻松的实现SQL开发者所熟悉的大多数查询。作为一个成长中的Web应用程序,MongoDB提供了清晰的扩展路线。

    2.2、敏捷开发。MongoDB没有固定的Schema,所有花在提交、沟通和实施Schema变更的时间都生下来了。

    2.3、分析和日志。MongoDB的目标原子更新和固定集合。

    2.4、缓存

    2.5、可变Schema

 

    3、MongoDB存在的弊端及局限性

    3.1、MongoDB应该运行于64位机器上。32为系统只能对4GB内存做寻址。

    3.2、数据占用的内存会自动按需分配。这样一来在共享环境中运行数据库会变得更加麻烦。所以最好能让MongoDB运行在一台专门的服务器上。

    3.3、运行带复制功能的MongoDB是十分重要的,尤其是没有开启Journaling日志的时候。

 

    4、MongoDB的最佳实践

    4.1、总是使用Replica Sets。Replica Sets通过自动failover机制提供MongoDB的高可用性。在应用中,如primary机器出现故障,那么某一台secondary机器就会通过选举成为新的primary,整个集群仍然能够提供正常服务。如果在开发者自己的环境中同步机制的代价过高,建议其使用一些云存储服务。

    4.2、保持版本更新。保持版本更新很重要,10gen在每个版本中都会修复一些问题,使MongoDB的运行更出色。比如在2.0.x版本中,MongoDB的存储性能和并发性能就有极大提高,同时还包括索引优化、Bug修复以及compaction命令等一系列改进,以便开发者更方便地扩展其集群。

    4.3、不要在32位系统上使用MongoDB。在32位机器上,MongoDB只能存储约2.5GB的数据。因为MongoDB在内部实现上是通过内存映射的方式来提高性能的,所以在32位机器上其内存地址本身就限制了数据容量。在Engine Yard云服务中使用MongoDB,请使用Large instance来部署MongoDB。在实际产品中,官方也只支持64位的MongoDB。

    4.4、默认开启journaling日志。MongoDB支持在写操作前记录journaling日志来提高节点的可用性。强烈建议在部署时开启journaling日志。注意数据文件的存放位置。在使用时,请确认你的数据文件处于一个持久化存储中(比如/data/mongodb目录)。也可以使用非持久化的设备进行数据文件存储,不过你最好小心再小心,因为这可能会对你的集群架构造成影响。推荐使用EBS进行MongoDB的数据文件存储。热数据最好能放在内存中。能够保持热数据(以及索引数据)一直放在内存中,这一点非常重要,它将对整个集群的性能造成影响。如果通过监控发现page fault的数量增加,那么很可能就是热数据量超出了可用内存大小。当热数据量超出了可用内存量时,通常有两种解决方法:增加内存和数据分片。建议先增加内存,再考虑通过数据分片的方式解决。

    4.5、压力过大升级配置。如果机器负载达到65%,那么应该考虑升级机器配置。在日常使用中,最好保持负载低于65%。同时这也对数据恢复和纵向扩展有影响。当需要升级配置时,AWS建议按下面的顺序来做:Large、Extra Large、High Memory 4XL。而在更高配置的机器上,网络延迟也会更小。

    4.6、分片需谨慎。分片策略会受数据访问特点的影响,所以在进行数据分片前,最好先理清楚数据的访问特点,并想明白是否确实需要分片。分片字段对性能的影响非常大,所以选择一个好的分片字段是非常重要的。Config节点对整个集群的健康运行是至关重要的,所以一旦你选择使用分片机制,就一定要保证有3个Config节点。永远不要删除Config节点的数据,要确保频繁地对这些数据进行日常备份。如果可能,通过域名来指定节点的地址,比如在/etc/hosts文件中指定相应的本地域名,这能让你在集群配置上更灵活。Config节点的压力很小,但还需运行在64位机器上。千万不要把3个Config节点都放在同一台机器上!

    4.7、使用Mongo MMS图形化监控服务。如果你还没有完善的MongoDB监控,可以尝试Mongo MMS。Mongo MMS是10gen官方发布的一个监控服务,可以将集群的各项健康指标以图形化的方式汇总展示。

 

    5、MongoDB都有哪些企业在使用

    5.1、官网上列出了很多国外的企业,MongoDB的使用场景和用户颇为广泛,包括SAP、EA、迪士尼、ebay、Facebook等。

    5.2、在国内,MongoDB不仅在淘宝、大众点评等互联网业务中使用,还在一些国内银行和汽车造业中使用。

 

    6、MongoDB支持的数据结构

    6.1、MongoDB存储的数据结构类型为BSON,是JSon的一个丰富数据类型的扩展,采用二进制编码存储

    6.2、MongoDB支持数据类型

    * string
    * integer
    * double
    * date
    * byte array (binary data)
    * boolean (true and false)
    * null
    * BSON object

    7、丰富的官方支持及方便管理的可视化客户端

    7.1、官方地址:http://www.mongodb.org

    7.2、可视化客户端官方地址:http://www.mongovue.com

    7.3、可视化客户端的破解方法:删除注册表中:[HKEY_CURRENT_USER\Software\Classes\CLSID\{B1159E65-821C3-21C5-CE21-34A484D54444}\4FF78130]下所有的值。

1 0
原创粉丝点击