文档介绍:MongoDB技术专题讲座
尤晓青
2016年7月25日
目录
NoSQL简介
MongoDB概述
MongoDB的安装配置
启动连接MongoDB
MongoDB的增删改查操作
分组、聚合和映射-归并
在Java中使用MongoDB
复制和分片
GridFS存储
MySQL与MongoDB设计实例对比
1. NoSQL简介
大数据背景下关系型数据库的瓶颈
大数据时代下的系统需求:
High performance –高并发读写的需求
Huge Storage –海量数据的高效率存储和访问的需求
High Scalability && High Availability –高可扩展性和高可用性的需求
关系数据库的解决方案存在各种问题:
分库分表:受业务规则影响,需求变动导致分库分表的维护复杂;系统数据访问层代码需要修改
Master-Slave架构:Slave实时性的保障,对于实时性很高的场合可能需要做一些处理;高可用性问题,Master就是那个致命点,容易产生单点故障
MMM(Master -Master Replication Manager for MySQL)架构:本身扩展性差,一次只能一个Master可以写入,只能解决有限数据量下的可用性
NoSQL的优势
易扩展:NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。甚至有多种NoSQL之间的整合。
灵活的数据模型:NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。
高可用:NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。
大数据量,高性能:NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。
什么是NoSQL?
它是Not Only SQL的缩写
一类非关系数据存储系统
通常不需要一个固定的表的模式
所有的NoSQL都淡化了一个或者更多的 ACID属性
分布式数据管理系统
系统架构
理论基础:CAP 原理、BASE模型、最终一致性
分布式数据系统的CAP原理的三要素:
一致性(Consistency)
可用性(Availability)
分区容忍性(Partition tolerance)
CAP原理:在分布式系统中,这三个要素最多只能同时实现两点,不可能三者兼顾。对于分布式数据系统,分区容忍性是基本要求;对于大多数web应用,牺牲一致性而换取高可用性,是目前多数分布式数据库产品的方向。
Basically Available(基本可用):支持分区失败
Soft-state(软状态):状态可以有一段时间不同步
Eventually consistent(最终一致):最终数据是一致的
当发生了很长一段时间没有更新,最终的所有更新将通过系统传播,和所有的节点将是一致的
对于一个给定的公认的更新和一个给定节点,最终更新到达的节点或节点,从服务中移除
理论基础:CAP 原理、BASE模型、最终一致性(续)
分类(存储模型)
类型
部分代表
特点
列存储
Hbase
Cassandra
Hypertable
顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。
文档存储
MongoDB
CouchDB
文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。
key-value存储
Tokyo / Tyrant
Berkeley DB
MemcacheDB
Redis
可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)
图存储
Neo4J
FlockDB
InfoGrid
图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。
对象存储
db4o
Versant
通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。
xml数据库
Berkeley DB XML
BaseX
高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。