mongodb之(1)mongodb数据库简介

1、mongodb简介

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json 的bjson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。

1.1、面向集合(Collenction-Orented)

意思是数据被分组存储在数据集中, 被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。

1.2、 模式自由(schema-free)

对于存储在MongoDB 数据库中的文件,我们不需要知道它的任何结构定义。无需如关系型数据库一样提前定义表结构,或如ElasticSearch一样定义mapper映射。在Mongodb中,我们可以自由扩展或删除字段。

1.3、 文档型

Mongodb以bson格式存储数据,其类似于JSON结构,但对JSON的数据类型进行了扩充。其存储以bson文档格式的数据。我们存储的数据是键-值对的集合,键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档. 我们把这个数据格式称作 “BSON” 即 “Binary Serialized Document Notation”。

2、Mongodb特点

  • 易于使用与扩展:不采用关系模型,面向集合存储,采用文档模型,便于开发者快速迭代;
  • 索引丰富,支持二级索引,允许多种快速索引,如唯一索引、复合索引、地理空间索引、全文检索等;
  • 支持聚合管道,用户能通过简单的片段创建复杂的聚合,并通过数据库自动优化。
  • 支持丰富的集合类型,如TTL类型集合,固定大小集合等;
  • 支持文件存储,基于一种易用的协议,存储大文件和文件元数据。
  • 支持动态查询;
  • 支持复制和故障恢复;
  • 使用高效的二进制数据存储,包括大型对象(如视频等);
  • 自动处理碎片,以支持云计算层次的扩展性;
  • 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及C++语言的驱动程序,社区 中也提供了对Erlang 及.NET 等平台的驱动程序;
  • 文件存储格式为BSON(一种JSON 的扩展);
  • 可通过网络访问;

3、Mongodb功能简介

  • 面向集合的存储:适合存储对象及JSON 形式的数据;
  • 动态查询:MongoDB 支持丰富的查询表达式。查询指令使用JSON 形式的标记,可轻易查询文档中内嵌的对象及数组;
  • 完整的索引支持:包括文档内嵌对象及数组。MongoDB 的查询优化器会分析查询表达式,并生成一个高效的查询计划;
  • 查询监视:MongoDB 包含一系列监视工具用于分析数据库操作的性能;
  • 复制及自动故障转移:MongoDB 数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移;
  • 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片);
  • 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器;

4、适用场景

  • 网站数据:MongoDB 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性;
  • 缓存:由于性能很高,MongoDB 也适合作为信息基础设施的缓存层。在系统重启之后,由MongoDB 搭建的持久化缓存层可以避免下层的数据源过载;
  • 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储;
  • 高伸缩性的场景:MongoDB 非常适合由数十或数百台服务器组成的数据库。MongoDB的路线图中已经包含对MapReduce 引擎的内置支持;
  • 用于对象及JSON 数据的存储:MongoDB 的BSON 数据格式非常适合文档化格式的存储及查询;

5、数据逻辑结构

MongoDB 的逻辑结构是一种层次结构。主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。逻辑结构是面向用户的,用户使用MongoDB 开发应用程序使用的就是逻辑结构。

  • MongoDB 的文档(document),相当于关系数据库中的一行记录。
  • 多个文档组成一个集合(collection),相当于关系数据库的表。
  • 多个集合(collection),逻辑上组织在一起,就是数据库(database)。
  • 一个MongoDB 实例支持多个数据库(database)。

文档(document)、集合(collection)、数据库(database)的层次结构如下图:

9795603-c7b67bf128c80008.png
1574489227(1).png

mongodb与关系型数据库的逻辑结构对比:

MongoDB术语/概念SQL术语/概念解释说明
databasedatabase数据库
collectiontable数据库表/集合
documentrow数据记录行/文档
fieldcolumn数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

6、数据存储结构

MongoDB 的默认数据目录是/data/db,它负责存储所有的MongoDB 的数据文件。在MongoDB内部,每个数据库都包含一个.ns 文件和一些数据文件,而且这些数据文件会随着数据量的增加而变得越来越多。所以如果系统中有一个叫做foo 的数据库,那么构成foo 这个数据库的文件就会由foo.ns,foo.0,foo.1,foo.2 等等组成。

MongoDB 内部有预分配空间的机制,每个预分配的文件都用0 进行填充,由于有了这个机制, MongoDB 始终保持额外的空间和空余的数据文件,从而有效避免了由于数据暴增而带来的磁盘压力过大的问题。

由于表中数据量的增加,数据文件每新分配一次,它的大小都会是上一个数据文件大小的2倍,每个数据文件最大2G。这样的机制有利于防止较小的数据库浪费过多的磁盘空间,同时又能保证较大的数据库有相应的预留空间使用。

数据库的每张表都对应一个命名空间,每个索引也有对应的命名空间。这些命名空间的元数据都集中在*.ns 文件中。

7、mongodb的数据类型

MongoDB文档存储是使用BSON类型,BSON(BSON short for Bin­ary JSON, is a bin­ary-en­coded seri­al­iz­a­tion of JSON-like doc­u­ments)是二进制序列化的形式。类如JSON,同样支持内嵌各种类型。

MongoDB 常用数据类型:

数据类型说明示例
String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。{"a" : "string"}
Number数值类型。不区分整数和浮点数。{"a" : 1.34}或{"a" : 123}
Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。整数:{"a" : 123}或 {"a" : NumberInt("3")} 或{"a" : NumberLong("3")}
Boolean布尔值。用于存储布尔值(真/假)。{"a" : true}
Double双精度浮点值。用于存储浮点值。{"a" : 1.34}
Min/Max keys将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Array用于将数组或列表或多个值存储为一个键。{"a" : ["b", "c" , "d", "e"]}
Timestamp时间戳。记录文档修改或添加的具体时间。
Object用于内嵌文档。{"a" : {"b" : "c" , "d" : "e"}}
Null用于创建空值。{"a" : null}
Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。{"a" : new Date()}
Object ID对象 ID。用于创建文档的 ID。  (每个文档都有){"a" : ObjectId()}
Binary Data二进制数据。用于存储二进制数据。{"a" : function() { /* ... */ }}
Code代码类型。用于在文档中存储 JavaScript 代码。
Regular expression正则表达式{“a”:/^egon.*?nb$/i}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值