图灵课堂MongoDB(一)

MongoDB介绍

什么是MongoDb

MongoDB是一个文档数据库(以json为数据模型),由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,数据格式是BSON,一种类似JSON的二进制形式的存储格式,简称Binary JSON,和JSON一样支持内嵌的文档对象和数组对象,因此可以存储比较复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似于关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
原则上Oracle和MySQL能做的事情,MongoDB都能做(包括ACID事物)

MongoDB概念与关系型数据非常类似:

SQL概念 MongoDB概念 描述
数据库(database) 数据库(database) 最外层的概念,可以理解为逻辑上的名称空间,一个数据库包含多个不同名称的集合
表(table) 集合(collection) 相当于SQL中的表,一个集合中可以存放多个不同额文档
行(row) 文档(document) 一个文档相当于表中的一行,由多个不同的字段组成
列(column) 字段(field) 文档中的一个属性,等同于列(column)
索引(index) 索引(index) 独立的检索式数据库结构,与SQL概念一致
主键(primary key) _id(字段) 每个文档中都拥有一个唯一的id字段,相当于sql中的主键(primary key)
视图(view) 视图(view) 可以看做一种虚拟的(非真实存在的)集合,与SQL中的视图类似,从MongoDB3.4半包开始提供了视图功能,其通过聚合管道技术实现
表连接(table joins) 聚合操作($lookup) MongoDB用于实现“类似”表连接(table join)的聚合操作

尽管这些概念大多与SQL标志定义类似,但MongoDB与传统的RDBMS仍然存在不少差异,包括:

  • 半结构化,在一个集合中,文档所拥有的字段并不需要是相同的,而且也不需要对所用的字段进行声明。因此,MongoDB具有很明显的半结构化特点。除了松散的表结构,文档还可以支持多级嵌套、数组等灵活的数据类型,非常契合面向对象编程模型。
  • 弱关系,MongoDB没有外键的约束,也没有非常强大的表连接能力,类似的功能需要使用聚合管道技术来弥补

MongoDB技术优势

MongoDB基于灵活的JSON文档模型,非常适合敏捷式的快速开发。
与此同时,其与生俱来的高可用、高水平扩展能力使得它在处理海量、高并发的数据应用时颇具优势。

  • Json结构和对象模型接近,开发代码量低。
  • Json的动态模型意味着更容易响应新的业务需求。
  • 复制集提供99.999%高可用
  • 分片架构支持海量数据和无缝扩容

MongoDB应用场景

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

如何考虑是否选择MongoDB?

  • 应用不需要复杂的/长事物以及join支持
  • 新应用,需求会变,数据模型无法确定,想要快速迭代开发
  • 应用需要2000-3000以上的读写QPS(更高也可以)
  • 应用需要TB甚至PB级别数据存储
  • 引用发展迅速,需要能快速水平扩展
  • 应用要求存储的数据不丢失
  • 应用需要99.999%高可用
  • 应用需要大量的地理位置查询、文本查询

MongoDB的快速开始

Mongo Shell的使用方法

mongo是MongoDB的交互JavaScript Shell界面,它为系统管理员提供强大的界面,并为开发人员提供了直接测试数据库查询和操作的方法。

1
mongo --port=27017

–port:指定端口号,默认27017
–host:指定链接的主机地址,默认127.0.0.1
-u:指定用户名
-p:指定密码

JavaScript的支持

mongo shell是基于JavaScript语法的,MongoDB使用了SpoiderMonkey作为JavaScript解释器引擎,这是由Mozilla官方提供的JavaScript内核解释器,该解释器也被同样用于大名鼎鼎的Firefox浏览器产品之中。
可以通过以下命令查看JavaScript解释器的版本:

1
2
> interpreterVersion()
MozJS-60

Mongo Shell常用命令

命令 说明
show dbs | show databases 显示数据库列表
use 数据库名 切换数据库,如果不存在创建数据库
db.dropDatabase() 删除数据库
show collections | show tables 显示当前数据库的集合列表
db.集合.stats() 查看当前集合详情
db.集合.drop() 删除集合
show users 显示当前数据库的用户列表
show roles 显示当前数据库的角色列表
show profile 显示最近发生的操作非
load(“xxx.js”) 执行JavaScript脚本文件
exit | quit() 退出当前Shell
help 查看mongodb支持哪些命令
db.help() 查询当前数据库支持的方法
db.version() 查看数据库版本