MongoDB

  1. 什么MongoDb
    一个以JSON为数据模型的文档数据库
  2. 为什么叫文档数据库
    文档来自于“JSON Document”,并非我们理解 的pdf word文档
  3. 主要用途
    应用数据库,类似于Oracle/MYSQL,海量数据处理,数据平台
  4. 主要特点
    建模为可选,JSON数据模型比较适合开发者,横向扩展可以支撑很大数据量和并发

ACID事务支持在4.0已经支持

  1. MongoDB VS. 关系型数据库
    对比

MongoDB的特色及优势

优势1:面向开发者的易用+高效数据库

无模式设计

1
2
3
4
5
6

多形性:同一个集合中可以包含不同字段的文档对象
动态性:线上修改数据模式,修改是应用与数据库均无须下线
数据治理 :支持使用JSON Schema来规范数据模式,在保证模式灵活动态的前提下,提供数据治理 能力

JSON模型之快速特性:```技术优势
  • 数据库引擎只需要在一个存储区读写
  • 反范式、无关联的组织 极大优化查询速度
  • 程序 API自然,开发快速

优势2:原生的高可用和横向扩展能力
(分布式方面的优势)

默认3个节点的复制部署(最少2最多50个)
奇数

Application –>Driver–>Primary/Secondary/Secondary(Replication)

横向能力:需要的时候无缝扩展/应用全透明/多种数据分布策略/轻松支持TB/PB数量级

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
show dbs
show collections

use xx

db.xx.findOne()

db.fruit.insertOne({name:"orangle"})

db.fruit.insertMany([{name:"orangle"},{name:"pear"},{name:"banana"}])

db.fruit.find()

db.fruit.find({"name":"apple"})

db.fruit.find({$and:[{name:"apple"},{name:"pear"}]})

db.fruit.find({$or:[{name:"apple"},{name:"pear"}]})

db.fruit.find({name:/^p/})//以字母p开头的

/**
{a:1}===>a=1
{a:{$ne:1}}===> a<>1
{a:{$gt:1}}===> a>1
{a:{$gte:1}}===> a>=1
{a:{$lt:1}}===> a<1
{a:{$lte:1}}===> a<=1

更复杂的条件

{a:1,b:1}或者{$and:[{a,1},{b,1}]}===> a=1 and b=1
{$or:[{a,1},{b,1}]}===> a=1 or b=1
{a:{$exists:false}}===> a is NULL
{a:{$in:[1,2,3]}}===> a IN(1,2,3)

$lt
$lte
$gt
$gte

*/

MongoDB分片集群架构

三种常见部署架构

单机版(20%):开发测试,不推荐线上环境使用
复制集(70%):高可用,一个二从或更多从节点
分片集群(10%):横向扩展,最小分片集群9~10个实例,适用大型应用场景