• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MongoDB简介

MongoDB 彭东稳 8年前 (2016-03-17) 22940次浏览 已收录 0个评论

MongoDB简介

MongoDB数据库是mongodb公司研发的一款NoSQL类型的文档型数据库,起源于2009发布第一个版本到现在,是当前非常热门的NoSQL数据库之一。mongodb公司之前的名字叫10gen,就连mongodb数据库的名字也是mongodb-10gen,这家公司将mongodb作为公司的主打产品,由于公司看到了mongodb极大的发展潜力所以就将公司的名字改名为mongodb

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案。当数据量达到50GB以上的时候,MongoDB的数据库访问速度是MySQL10倍以上。MongoDB的并发读写效率不是特别出色,根据官方提供的性能测试表明,大约每秒可以处理0.5~1.5万次读写请求。MongoDB还自带了一个出色的分布式文件系统GridFS,可以支持海量的数据存储。MongoDB也有一个Ruby的项目MongoMapper,是模仿MerbDataMapper编写的MongoDB接口,使用起来非常简单,几乎和DataMapper一模一样,功能非常强大。

MongoDB是一种强大、灵活、可扩展的数据存储方式。它扩展了关系型数据库的众多有用功能,如辅助索引、范围查询和排序。MongoDB的功能非常丰富,比如内置的对MapReduce式聚合的支持,以及对地理空间索引的支持。

MongoDB是面向文档的数据库,不是关系型数据库。其基本的思路就是将关系型数据库中的“表”的概念换成了“集合”,而把表中的“行”的概念换成更加灵活的“文档”模型,所以组合起来就是集合中存储一个个的文档。但MongoDB没有模式,文档的键不需要事先定义也不会固定不变,由于没有模式需要更改,通常不需要迁移大量数据。不必将所有数据都放到一个模子里面,应用层可以处理新增或者丢失的键,非常容易变更数据模型。而在关系型数据库中,存储数据之前必须要先定义好数据结构,并且数据结构是对所有行生效的。当然MongoDB还是有库的概念,同时也是C/S架构,这些跟关系型数据库是相同的,同时MongoDB不需要先创建库了,直接使用USE db_name就可以使用这个库,然后也不需要提前定义表了,插入数据时定义一个表明就可以直接往里面插入数据了。

容易扩展

现在是一个大数据的时代。企业数据的存储在不断增长,就拿关系型数据库来说,当数据库性能达到一定瓶颈时,那么该如何扩展数据库呢?是选择横向扩展还是纵向扩张呢?

MongoDB从最初设计的时候就考虑到了扩展的问题。它所采用的面向文档的数据模型使其可以自动在多台服务器之间分割数据。它还可以平衡集群的数据和负载,自动重排文档。要是需要更大的容量时,只需在集群中添加新机器,然后让数据库来处理剩下的事。

管理方便

MongoDB尽量让服务器自治来简化数据库的管理,除了启动数据库服务器之外,几乎没有什么必要的管理操作。如果主服务器挂掉了,MongoDB会自动切换到备份服务器上,并且将备份服务器提升为活跃服务器。在分布式环境下,集群只需要知道有新增的节点,就会自动集成和配置新节点。

MongoDB丰富的特性

1) 文件存储,支持用一种容易使用的协议存储大型文件和文件的元数据。

2)  基于文档的数据库系统,格式是以BSONJSON,半结构化数据)存储。

3)  性能的保证:

   基于C++研发,速度快

   支持完全索引(数据读取全靠索引)

   不支持事务,意味每一个操作都是原子的且是强一致性

   操作在内存中进行,定义同步到磁盘(虽然比起Memcache差点,但是比MySQL/Oracle好太多)

4) 支持很好的扩展性,比如复制,auto_sharding

5)  能基于复制自动完整故障转移。

6) 支持文档的查询,可以返回一个文档也可以返回一个游标(结果集)。

7) 支持查询性能分析。

8) 支持动态查询,就是可以像MySQL那样自己书写查询条件,而有些NoSQL这不行。

9) 支持使用MapRedure做分组聚合操作,处理大数据极强。

10) 支持空间索引,用于地理数据表述的场景,如地图。

11)  自动处理碎片,以支持云计算层次的扩展性。

12)  GridFS系统是MongoDB中的一个内置功能,可以用于存放大量小文件。

13)  支持各种编程语言:RUBYPYTHONJAVAC++PHPC#等多种语言。

14)  支持存储javascript,开发人员不必使用存储过程了,可以直接在服务器端存取javascript的函数和值。

MongoDB适用场景

1)  WEB站点,高并发高性能。

2)  对于那种随时需要更改数据结构。

3)  适用于做缓存,MongoDB也属于key value存储。

4)  海量数据存储但用到的数据很少的场景。

5)  高可扩展性的应用场景。

6)  适用哪些对象存储或Json编程环境中,比如web

既然有这么多适用的场景那么肯定也有一些不适用的场景了,比如需要事物支持的、做商业智能决策的以及程序查询接口必须是SQL的,MongoDB都做不了。

根据DB-Engines的排名统计,MongoDB综合排名第四(20161月数据,前三名分别是OracleMySQLSQL Server),NoSQL领域(非RDBMS)里排名第一。尤其是在2015年里,一口气发布了两个大版本,3月发布了3.0版本,11月发布3.2版本。

MongoDB简介

MongoDB是当前最受欢迎的新一代数据库。迄今为止已经有接近800万下载。使用MongoDB的用户包括财富500公司如eBay, Cisco, MetLife, Adobe等等。相比于传统关系数据库,MongoDB对于大数据,高并发以及高可靠性有强大的支持。相比于其他的NoSQL数据库,MongoDB的基于文档的数据模型及其动态建模的特性使得它更加自由灵活,适用于各种应用场景如CRM,内容管理,事件纪录,商情分析,手机应用,社交等等。但是MongoDB的最大优势在于其庞大的社区。根据非正式统计,目前有20多万MongoDB网络大学的注册学生,3万多线下用户组成员。全世界各地都有MongoDB的技术交流活动。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (3)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!