一、MongoDB是什么
	1、维基百科
	MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
	MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
	2、简而言之
	MongoDB是文档型的NoSQL数据库,数据以文档(对应关系型数据库的记录)的形式在MongoDB中保存,文档实际上就是一个个JSON字符串,使用JSON的好处是非常直观,通过一系列的Key-Value键值对来表示数据,符合我们的阅读习惯。
	在Java、Python中对JSON都有很好的支持,数据从MongoDB中读取出来后,可无需转换直接使用;支持丰富的数据结构,Value可以是普通的整型、字符串、数组、嵌套的子文档,使用嵌套的好处是在MongoDB中仅需一次简单的查询就能够获取到你所需的数据。
	二、MongoDB 的应用场景
	1、MongoDB事务
	MongoDB目前只支持单文档事务,MongoDB暂时不适合需要复杂事务的场景。
	灵活的文档模型JSON格式存储最接近真实对象模型,对开发者友好,方便快速开发迭代,可用复制集满足数据高可靠、高可用的需求,运维较为简单、故障自动切换可扩展分片集群海量数据存储。
	2、多引擎支持各种强大的索引需求
	支持地理位置索引
	可用于构建各种O2O应用
	文本索引解决搜索的需求
	TTL索引解决历史数据过期的需求
	Gridfs解决文件存储的需求
	aggregation & mapreduce解决数据分析场景需求,可以自己写查询语句或脚本,将请求分发到 MongoDB 上完成。
	3、具体的应用场景
	传统的关系型数据库在解决三高问题上的力不从心。
	何为三高?
	High performance - 对数据库高并发读写的需求。
	Huge Storage - 对海量数据的高效率存储和访问的需求。
	High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。
	MongoDB可以完美解决三高问题。
	4、以下是几个实际的应用案例:
	(1)游戏场景
	使用MongoDB存储游戏用户信息、装备、积分等,直接以内嵌文档的形式存储,方便查询、更新。
	(2)物流场景
	使用MongoDB存储订单信息、订单状态、物流信息,订单状态在运送过程中飞速迭代、以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更查出来,牛逼plus。
	(3)社交场景
	使用MongoDB存储用户信息,朋友圈信息,通过地理位置索引实现附近的人、定位功能。
	(4)物联网场景
	使用MongoDB存储设备信息、设备汇报的日志信息、并对这些信息进行多维度分析。
	(5)视频直播
	使用MongoDB存储用户信息、点赞互动信息。
	5、选择MongoDB的场景总结:
	数据量大
	读写操作频繁
	数据价值较低,对事务要求不高
	三、MongoDB对比MySQL
	1、关键字对比
	MySQL MongoDB 解释说明
	database database 数据库
	table collection 表/集合
	row document 行/文档
	column field 字段/域
	index index 索引
	join 嵌入文档 表关联/MongoDB不支持join,MongoDB通过嵌入式文档来替代多表连接
	primary key primary key 主键/MongoDB自动将_id字段设置为主键
	四、数据模型
	MongoDB的最小存储单位是文档(document)对象,相当于MySQL中的行,数据以BSON文档的形式存储在磁盘上。
	BSON是一种二进制形式的存储格式,简称Binary JSON。
	BSON和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。
	BSON采用了类似于C语言结构体的名称、支持内嵌的文档对象和数组对象,具有轻量级、可遍历性、高效性三大特点,可以有效描述非结构化数据和结构化数据,灵活性高,但空间利用率不是很理想。
	BSON中除了基本的String、integer、boolean、double、null、array和object,MongoDB还支持一些特殊的数据类型,date、object id、binary data、regular expression和code。
	数据类型 描述 举例说明
	字符串 {“公众号”:“哪吒编程”}
	对象id 对象id是文档的唯一id {“name” :ObjectId() }
	布尔值 true或false {“name” :true}
	数组 {“name” :[“哪吒”,“云韵”,“比比东”]}
	64位浮点数 {“x” :1.23658,“y”:100}
	null 表示空 {“name” :null}
	undefined 文档中可以使用未定义类型 {“name” :undefined}
	符号 会自动转为字符串 
	正则表达式 文档中可以以JavaScript的正则表达式语法 {“name” : /foobar/i}
	代码 文档中可以包含JavaScript代码 
	二进制数据 二进制数据是由任意字节的串组成,不过shell中无法使用 
	最大值/最小值 BSON包括一个特殊类型,表示可能的最大值。shell中没有这个类型 
	五、MongoDB的特点
	1、高性能
	MongoDB提供高性能的数据持久性。对嵌入式数据模型的支持减少了数据库系统上的IO活动。
	索引支持更快的查询,并且包含嵌入式文档和数组的键。
	文本索引解决搜索的需求;
	TTL索引解决历史数据自动过期的需求;
	地理位置索引可用于构建各种 O2O 应用;
	2、高可用性
	MongoDB的复制工具称为副本集(reolica set),它包含提供自动故障转移和数据冗余。
	3、高可用性
	MongoDB提供了水平可扩展性作为其核心功能的一部分。
	分片将数据分布在一组集群的机器上。(海量数据存储、服务能力水平扩展)
	从3.4起,MongoDB支持基于片键创建数据区域,在一个平衡的集群中,MongoDB将一个区域所覆盖的读写只定向到该区域内的那些片。
	4、丰富的查询支持
	MongoDB支持丰富的查询语言,支持读写(CRUD)操作、比如数据聚合、文本搜索、地理空间查询等。
	5、其他特点
	如动态模式、灵活的文档模型。
	六、下载安装MongoDB
	1、 MongoDB官网下载地址
	https://www.mongodb.com/try#community
	2、Products – servers
	3、MongoDB Community Server
	4、选择release版
	5、下载zip文件,解压
	6、创建data/db目录,命令行启动程序
	mongod --dbpath=\data\db
	7、由于找不到vcruntime140_1.dll,无法继续执行代码
	七、由于找不到vcruntime140_1.dll,无法继续执行代码
	1、下载vcruntime140_1.dll文件
	2、将vcruntime140_1.dll文件拷贝到C:\Windows\System32即可
	3、再次命令行启动程序
	mongod --dbpath=\data\db
	4、MongoDB默认端口号27017
	如果想修改端口号,可以通过–port指定端口号。
	八、安装compass图形化管理工具
	1、下载地址
	https://docs.mongodb.com/compass/master/install/
	2、compass安装成功、启动
	点击MongoDBCompass.exe
	3、compass连接MongoDB
	mongodb://127.0.0.1:27017
     如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h64873.shtml








