MongoDB学习笔记(一)

虽然在TTMS这个项目中,我已经使用了MongoDB数据库,但是我觉得我还不是很了解它,所以在项目结束的第一天,我打算重新认识MongoDB

一.认识MongoDB

NoSQL

NoSQL(Not Only SQL,非关系型数据库),主要特点是非关系型的,分布式的,开源的,水平可扩展的。

这里写图片描述

关系型数据库,我目前只使用过MySQL,SQL Server,但是关系型和非关系型两种在使用的时候的差别就比较明显了

NoSQL特点:

  • 可以处理超大量的数据
  • 它运行在便宜的PC服务器集群上
  • 它击碎了性能瓶颈
  • 它没有过多的操作
  • 它的支持者源于社区

这里写图片描述

MongoDB特点及功能

MongoDB最大的特点是支持的查询语言非常强大,其语法有点类似关系数据库单表查询的绝大部分功能,而且支持对数据建立索引,它是一个面向集合的,模式自由的文档型数据库

  • 面向集合

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

  • 模式自由

    意味着对于存储在MongoDB数据库中的文件,你不需要知道它的任何结构定义,这点我在使用过程中也深有体会,保存在MongoDB数据库中某个集合下的文档它的键可以是不一样的

    {“welcome” : “Beijing”}
    {“age” : 25}

  • 文档型

    我们存储的数据是键-值对的集合,键是字符串,值可以是数据类型集合里的任何类型,包括数组和文档,我们把这个数据格式称为“BSON”,即“Binary serialized document notation”

MongoDB的特点:

  • 面向集合存储,易于存储对象类型的数据
  • 模式自由
  • 支持动态查询
  • 支持完全索引,包含内部对象
  • 支持查询
  • 支持复制和故障恢复
  • 使用高效的二进制数据存储,包括大型对象(如视频等)
  • 自动处理碎片,以支持云计算层次的可扩展性
  • 支持Python,PHP,Ruby,Java,C,C#,JavaScript,Perl及C++语言的驱动程序,社区也提供了对Erlang及.NET等平台的驱动程序
  • 文件存储格式为BSON(一种JSON的扩展)
  • 可通过网络访问

MongoDB的功能

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

MongoDB适用场合

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

MongoDB是一个可移植的数据库,在主流的操作系统上都可以使用,及跨平台特性,MongoDB Shell是MongoDB自带的交互式JavaScript Shell,是对MongoDB执行操作和管理的交互式环境

二.MongoDB入门

体系结构

一个运行着的MongoDB可以看作一个MongoDB Server,该Server由实例和数据库组成。一般情况下,一个MongoDB。一般情况下,一个MongoDB Server机器上包含一个实例和多个与之对应的数据库,但是在特殊情况下,如特殊的情况下,如硬件投入成本有限或特殊的应用需求,也允许一个Server机器上有多个实例和数据库

MongoDB中一系列物理文件(数据文件、日志文件等)的集合或与之对应的逻辑结构(集合、文档等)称为数据库。简单来说,数据库是由一系列与磁盘有关的物理文件组成的。

数据逻辑结构

MongoDB数据逻辑结构是面向用户的,用户使用MongoDB开发应用程序使用的是逻辑结构,MongoDB逻辑结构是一种层次结构,由文档(document)、集合(collection)、数据库(database)三部分组成,它们之间三部分的关系如下:

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

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

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

数据类型

MongoDB中的文档可以理解为JSON类型的对象,MongoDB也支持很多额外的数据结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值