mongodb学习

1. 简介

mongodb是用C++语言编写的一个基于分布式文件存储的数据库。他是介于关系数据库和非关系数据库之间的产品,它可以储存类似json的bson格式数据,因此可以储存比复杂的数据类型,Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

2. 特性

mongodb的设计目标是高性能、可扩展、易部署、易使用,存储数据非常方便。其主要功能特性如下。

  1. 面向集合存储,容易存储对象类型的数据。在mongodb中数据被分组存储在集合中,集合类似RDBMS中的表,一个集合中可以存储无限多的文档。
  2. 模式自由,采用无模式结构存储。在mongodb中集合中存储的数据是无模式的文档,采用无模式存储数据是集合区别于RDBMS中的表的一个重要特征。
  3. 支持完全索引,可以在任意属性上建立索引,包含内部对象。mongodb的索引和RDBMS的索引基本一样,可以在指定属性、内部对象上创建索引以提高查询的速度。除此之外,mongodb还提供创建基于地理空间的索引的能力。
  4. 支持查询。mongodb支持丰富的查询操作,mongodb几乎支持SQL中的大部分查询。
  5. 强大的聚合工具。mongodb除了提供丰富的查询功能外,还提供强大的聚合工具,如count、group等,支持使用MapReduce完成复杂的聚合任务。
  6. 支持复制和数据恢复。mongodb支持主从复制机制,可以实现数据备份、故障恢复、读扩展等功能。而基于副本集的复制机制提供了自动故障恢复的功能,确保了集群数据不会丢失。
  7. 使用高效的二进制数据存储,包括大型对象(如视频)。使用二进制格式存储,可以保存任何类型的数据对象。
  8. 自动处理分片,以支持云计算层次的扩展。mongodb支持集群自动切分数据,对数据进行分片可以使集群存储更多的数据,实现更大的负载,也能保证存储的负载均衡。
  9. 支持Perl、PHP、Java、C#、JavaScript、Ruby、C和C++语言的驱动程序,mongodb提供了当前所有主流开发语言的数据库驱动包,开发人员使用任何一种主流开发语言都可以轻松编程,实现访问mongodb数据库。
  10. 文件存储格式为BSON(JSON的一种扩展)。BSON是对二进制格式的JSON的简称,BSON支持文档和数组的嵌套。
  11. 可以通过网络访问。可以通过网络远程访问mongodb数据库。

3. 与关系型数据库的对比

对比项 mongodb mysql
数据库模型 关系型 非关系型
collection table
表的一行数据 document record
表字段 key field
字段值 value value
主外键 mongodb自动将_id字段设置为主键 PK,FK
索引 支持 支持
支持事务 仅单文档支持事务操作 支持
join 不支持 支持
内存占用
数据处理方式 将热点数据储存在内存中,提高查询效率 不同引擎有不同处理方式

4. 数据类型

数据类型 描述 描述
null 表示空值或未定义的对象 {“x”:null}
布尔值 真或假:true或false {“x”:true}
32位整数 32位整数。shell是不支持该类型的,shell中默认会转换成64位浮点数
64位整数 64位整数。shell是不支持该类型的,shell中默认会转换成64位浮点数
64位浮点数 64位浮点数。shell中的数字就是这一种类型 {“x”:3.14,“y”:3}
字符串 UTF-8字符串 {“foo”:“bar”}
符号 shell不支持,shell会将数据库中的符号类型的数据自动转换成字符串
对象id 文档的12字节的唯一id {“id”:ObjectId()}
日期 从标准纪元开始的毫秒数 {“date”:newDate()}
正则表达式 文档中可以包含正则表达式,遵循JavaScript的语法 {“foo”:/foobar/i}
代码 文档中可以包含JavaScript代码 {“x”:function(){}}
未定义 undefined {“x”:undefined}
数组 值的集合或者列表 {“arr”:[“a”,“b”]}
内嵌文档 文档可以作为文档中某个key的value {“x”:{“foo”:“bar”}}

5. 应用场景

• 游戏场景,使用 mongodb 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新
• 物流场景,使用 mongodb 存储订单信息,订单状态在运送过程中会不断更新,以 mongodb 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
• 社交场景,使用 mongodb 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
• 物联网场景,使用 mongodb 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
• 视频直播,使用 mongodb 存储用户信息、礼物信息等
• ……

文章目录
  1. 1. 1. 简介
  2. 2. 2. 特性
  3. 3. 3. 与关系型数据库的对比
  4. 4. 4. 数据类型
  5. 5. 5. 应用场景
|