文章目录
- 一、MongoDB是什么
- 二、功能特点
- 2.1 索引
- 2.2 分片
- 2.3 聚合和批处理
- 2.4 内置功能
- 2.5 服务端脚本执行(函数存储)
- 2.6 语言支持
- 三、基本概念
- 3.1 文档
- 3.2 集合
- 3.3 数据库
一、MongoDB是什么
1、MongoDB 是由C++语言编写的,是一个基于`分布式文件存储`的开源数据库系统。
2、在高负载的情况下,添加更多的节点,可以保证服务器性能。
3、MongoDB 旨在为WEB应用提供`可扩展`的`高性能`数据存储解决方案。
4、MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
二、功能特点
2.1 索引
MangoDB支持通用辅助索引,能进行多种快速查询,提供多种索引能力。
你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序
2.2 分片
如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片
2.3 聚合和批处理
mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作.
Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理
2.4 内置功能
GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件.
2.5 服务端脚本执行(函数存储)
MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,
也可以把函数的定义存储在服务端,下次直接调用即可。
2.6 语言支持
MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
三、基本概念
3.1 文档
文档是MongoDB的核心、基本数据单元,类似于JS中的JSON对象,由多个key-value构成,但是支持更多的数据类型。
多个键以及相关的值有序的放置在一起便是文档。在大多数编程语言中都是使用多个key-value的形式,
java中是map,Python中是字典,JavaScript中是对象。
`a`:文档中的key/value是有序的,没有相同的两个文档。
`b`:文档中的value的数据类型没有限制,甚至可以是文档。
`c`:文档的key一般应该是字符串。
`d`:文档的key不能含有空字符串,不能含有.和$以及_。
`e`:文档的key不能重复。
`f`:mangoDB中,key和value都是区分数据类型和大小写的。
3.2 集合
基本概念
集合就是一组文档,如果说文档类似于关系数据库中的行,那么`集合`就是`表`。
集合是无模式的。一个集合中的文档可以是任意类型的,也就是说文档是可以任意组合的。
集合存在的意义
`a`:虽然集合中可以保存任意类型的文档组合,但是如果不妥善的组织、分类文档的保存,那么不利于数据的分类管理。
`b`:在一个存放多种不同类型的集合里面查询特定类型的文档在速度上不划算,
`c`:最好是每种类型文档分别存在不同的集合中,加快查询速度。
`d`:把同类数据放在同一个集合,保证数据聚合性。
`e`:同时,同类的文档放在同一集合中可以提高索引的有效性。
集合的命名
`a`:和key一样不能有空字符串
`b`:不能以"system."开头,不能含有"$"
`c`:一个集合的完全限定名:数据库名.集合(子集合)名称,例如cms.blog.posts
子集合
在MangoDB中最常用的组织集合的方式就是子集合,也就是使用:命名空间名.集合名 来定义集合名称,
这样做的目的只是为组织结构更好。
集合的访问
访问集合我们一般使用db.集合名的方式,但是当集合的名称恰好是数据库属性名时,这种方式就无法得到集合,
只能使用:db.getCollection('集合名')的方式得到集合。
同时,由于JS中,x.y等价于x['y'],所以可以用后边一种方式访问数据。
3.3 数据库
基本概念
MangoDB中最基本的存储单元是文档,文档组成集合,集合组成数据库。
一个MangoDB实例可以承载多个数据库,数据库之间完全独立。
'一般情况下,一个应用对应一个数据库,类似于关系数据库中的外模式。'
命名
数据库的名称最终会变成系统的文件名称。
不能是空字符串
不得含有空格、点、斜杠与反斜杠以及空字符串。
应该全部小写
最多64字节
系统默认数据库
MangoDB系统中和传统的关系数据库一样都会有一些初始化的数据库保存数据库系统运行信息。
`Admin`
root库。一些特定的服务器端命令只能从这个库运行。
`Local`
local库中的集合永远都不会被复制,用于存储不准备分布式保存的、只保存在本地(单服务器)的集合。
`Config`
当MangoDB用于分片设置时,config库在内部使用,用于保存分片相关的配置信息。