MongoDB是目前最流行的NoSQL数据库,是一个基于分布式文件存储的数据库,由C++语言编写,特点是高性能、易部署、易使用、存储数据非常方便,旨在为Web应用提供可扩展有高性能数据存储解决方案。
MongoDB是由10gen团队所开发,于年2月首度推出,MongoDB开源、跨平台、支持Windows、Linux、OSX和Solaris系统。
当前最新版本为6.0.3。
1、NoSQL简介
NoSQL(NoSQL=NotOnlySQL),意即“不仅仅是SQL”。NoSQL,指的是非关系型的数据库。NoSQL有时也称作NotOnlySQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
1)RDBMSvsNoSQL
RDBMS:
高度组织化结构化数据
结构化查询语言(SQL)(SQL)
数据和关系都存储在单独的表中
数据操纵语言,数据定义语言
严格的一致性
基础事务
NoSQL:
代表着不仅仅是SQL
没有声明性查询语言
没有预定义的模式
键-值对存储,列存储,文档存储,图形数据库
最终一致性,而非ACID属性
非结构化和不可预知的数据
CAP定理
高性能,高可用性和可伸缩性
2)NoSQL的优点/缺点
优点:
高可扩展性
分布式计算
低成本
架构的灵活性,半结构化数据
没有复杂的关系
缺点:
没有标准化
有限的查询功能(到目前为止)
最终一致是不直观的程序
2、MongoDB的使用场景
随着互联网业务的发展,在数据操作方面出现越来越多的“三高”业务需求,什么是“三高”需求?即:
Highperformance:对数据库高并发读写的需求;
HugeStorage:对海量数据的高效率存储和访问的需求;
HighScalabilityHighAvailability:对数据库的高可扩展性和高可用性的需求。
传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心,而MongoDB数据库可应对“三高”需求。
具体的应用场景如:
1)社交场景:使用MongoDB存储社交用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能;
2)游戏场景:使用MongoDB存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问;
3)物流场景:使用MongoDB存储订单信息,订单状态在运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来;
4)物联网场景:使用MongoDB存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析;
5)视频直播:使用MongoDB存储用户信息、点赞互动信息等。
这些应用场景中,数据操作方面的共同特点是:
数据量大
写入操作频繁(读写都很频繁)
价值较低的数据,对事务性要求不高
对于这样的数据,我们更适合使用MongoDB来实现数据的存储。
那么什么时候选择MongoDB呢?
在架构选型上,除了上述的三个特点外,如果你还犹豫是否要选择它?可以考虑以下的一些问题:
1)应用不需要事务及复杂join支持
2)新应用,需求会变,数据模型无法确定,想快速迭代开发
3)应用需要-以上的读写QPS(更高也可以)
4)应用需要TB甚至PB级别数据存储
5)应用发展迅速,需要能快速水平扩展
6)应用要求存储的数据不丢失
7)应用需要99.%高可用
8)应用需要大量的地理位置查询、文本查询
如果上述有1个符合,就可以考虑MongoDB。相对MySQL,可以以更低的成本解决问题(包括学习、开发、运维等成本)。
MongoDB的典型行业案例参考如下:
3、MongoDB简介
MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最像关系型数据库(MySQL)的非关系型数据库。
它支持的数据结构非常松散,是一种类似于JSON的格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。
MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认为就是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。