MongoDB学习

MongoDB是基于分布式文件存储的数据库。
由C++编写,目的是为web应用提供"可扩展的高性能数据存储"解决方案。
MongoDB是介于关系数据库和非关系数据库之间的产品。是非关系数据库当中功能最丰富,最像关系数据库的。

1. NoSQL简介
NoSQL(Not Only SQL), 意思是"不仅仅是SQL"
NoSQL指的是非关系型数据库,用于超大规模的数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

2. RDBMS vs NoSQL
RDBMS:
- 高度组织化结构化数据
- 结构化查询语言SQL
- 数据和关系都存储在单独的表中
- 数据操纵语言,数据定义语言
- 严格的一致性
- 事务

NoSQL:
- Not Only SQL
- 没有声明性查询语言
- 没有预定于的模式
- key/value对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID.
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用性,可伸缩性

NoSQL的优点和缺点
优点:
- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系

缺点:
- 没有标准化
- 有限的查询功能
- 最终一致是不直观的程序

3. 什么是MongoDB
MongoDB是基于分布式文件存储的开源数据库系统。
在高负载下,通过添加更多的节点,可保证服务器性能。
MongoDB旨在为web应用提供可扩展的高性能数据存储解决方案。
MongoDB将数据存成文档,数据结构由(key/value)对组成。MongoDB文档类似于Json对象,字段值可以包含其他文档,数组及文档数组。

MongoDB的主要特点:
- MongoDB提供了面向文档的存储,操作起来较简单和容易。
- 你可以在MongoDB记录中设置任何属性的索引(如:firstName='Alian', Address='Gandhi Road')来实现更快的查询。
- 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
- 如果负载增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其他节点上。这就是所谓的"分片"
- MongoDB支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDB使用update()命令可以实现替换完成的文档或者一些指定的数据字段
- MongoDB中的map/reduce主要用来对数据进行批量处理和聚合操作。
- Map-Reduce. Map函数调用emit(key, value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理
- Map函数和Reduce函数是用JavaScript编写的,可通过db.runCommand或mapreduce命令来执行MapReduce操作。
- GridFS是MongoDB中的一个内置功能,可用于存放大量小文件
- MongoDB支持各种编程语言:Ruby, Python, Java, C++, php, c#等
- MongoDB安装简单

4. MongoDB概念解析
与SQL做对比:
SQL -- MongoDB -- 说明
database -- database -- 数据库
table -- collection -- 数据库表/集合
row -- document -- 数据记录行/文档
column -- field -- 数据字段/域
index -- index -- 索引
table join -- 无 -- 表连接/MongoDB不支持表连接
primary key -- primary key -- 主键/MongoDB自动将_id字段设置为主键

1)数据库:
一个mongoDB可以创建多个数据库
MongoDB的默认数据库为"db", 该数据库存储在data目录中。
MongoDB的单个实力可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

2)文档:
文档是mongoDB中最核心的概念。文档类似于关系数据库中的一行。
多个键及其关联的值有序的放在一起,就是文档。mongodb使用了BSON这种结构来存储数据和网络数据交换。
BSON可以理解为在JSON基础上添加了一些json中没有的数据类型。

文档的规则:
- 文档中的key/value是有序的
- 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)
- mongodb区分类型和大小写
- mongodb的文档不能有重复的key
- 文档的key是字符串

3)集合
集合是一组文档的组合。集合类似于关系数据库中的表。
在mongodb中的集合是无模式的,也就是说,集合中存储的文档的结构可以是不同的,比如下面两个文档可以同时存入到一个集合中。
{"name":"abc"}
{"name":"abc","sex":"nan"}

4)元数据
数据库的信息存储在集合中,他们使用了系统的命名空间:
dbname.system.*

MongoDB的数据类型:
String, Integer, Boolean, Double, Min/Max keys, Arrays, Timestamp, Object, Null, Symbol, Date, Object ID, Binary data, Code, Regular expression.

5. MongoDB复制(副本集)
MongoDB复制是将数据同步到多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性。
复制还允许您从硬件故障和服务中断中恢复数据。

MongoDB复制原理:
mongodb的复制至少需要两个节点,其中一个是主节点,负责处理客户端请求,其余都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主一从,一主多从。
主节点记录在其上的所有操作oplog, 从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
副本集特征:
- N个节点的集群
- 任何节点可作为主节点
- 所有写入操作都在主节点上
- 自动故障转移
- 自动恢复

6. MongoDB分片
在MongoDB里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。
当MongoDB存储海量数据时,一台机器可能不足以存储数据,也不足以提供可接受的读写吞吐量。这时,我们可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

为什么使用分片?
- 复制所有的写入操作到主节点
- 延迟的敏感数据会在主节点查询
- 单个副本集限制在12个节点
- 当请求量巨大时不足出现内存不足
- 本地磁盘不足
- 垂直扩展价格昂贵
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值