Site
Site
文章目录
  1. Nosql 简介
    1. 关系型数据库遵循 ACID 规则
    2. Nosql 的特性
    3. CAP 定理
    4. Nosql的优缺点
    5. Nosql 数据库分类
  2. MongoDB 简介
    1. MongoDB的特点
    2. MongoDB的概念解析
    3. 数据库
    4. 文档
    5. 集合
    6. 元数据
    7. MongoDB 数据类型

MongoDB 简介

Nosql 简介

要学习MongoDB需要先了解NoSQL。
之前我们的数据库系统都是使用的关系模型,Nosql泛指非关系型的数据库。超大规模和高并发的SNS类型的web2.0纯动态网站传统的关系数据库已经显得力不从心,Nosql数据库的产生就是为了解决这些问题,Nosql用于超大规模数据的存储。

关系型数据库遵循 ACID 规则

事物的特性:

1.A(Atomicity)原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。

2.C(Consistency)一致性
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。

3.I(Isolation)独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。

4.D(Durability)持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

Nosql 的特性

  1. Not only sql,不仅仅是sql
  2. 没有声明性的查询语言
  3. 没有预定义的模式
  4. 键-值对存储,列存储,文档存储,图形数据库
  5. 最终一致性,而非 ACID 属性
  6. 非结构化和不可预知的数据
  7. CAP定理
  8. 高性能,高可用性和可伸缩性

CAP 定理

在计算机科学中,CAP定理又被称作布鲁尔定理,它指出一个分布式计算系统不可能同时满足的三点:

  • 一致性(Consistency),所有节点在同一时间具有相同的数据。
  • 可用性(Availability),保证每个请求不管成功失败都有响应
  • 分隔容忍(Partition tolerance),系统中任意信息的丢失或者失败不会影响系统的继续运作。

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性,最多只能同时较好的满足其中两个。

  • CA:单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
  • CP: 满足一致性,分区容忍性的系统,通常性能不是特别高。(比如 Zookeeper)
  • AP:满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。(比如 Eureka)

Nosql的优缺点

优点:

  • 高可扩展性
  • 分布式计算
  • 低成本
  • 架构的灵活性,半结构化数据
  • 没有复杂的关系

缺点:

  • 没有标准化
  • 有限的查询功能
  • 最终一致时不直观的程序

Nosql 数据库分类

类型 部分代表 特点
列存储 Hbase,CassandraH,ypertable 按列存储数据。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。
文档存储 MongoDB,CouchDB 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。
key-value存储 Tyrant,BerkeleyDB,MemcacheDB,Redis 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收
图存储 Neo4J,FlockDB 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。
对象存储 db4o,Versant 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。
xml数据库 BaseX,BerkeleyDB 高效的存储XML数据,并支持XML的内部查询语法。

MongoDB 简介

MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB旨在WEB应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数据结构由键值对组成。MongoDB文档类似于json对象。字段值可以包含其他文档,数组及文档数组。

MongoDB的特点

  • MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
  • 你可以在MongoDB记录中设置任何属性的索引来实现更快的排序。
  • 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
  • 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  • Mongo支持丰富的查询表达式。查询指令使用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允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • MongoDB安装简单。注意:国内下载需要翻墙,不然会停在下载页面,不出现下载框

MongoDB的概念解析

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

数据库

一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为db,改数据库存储在data目录中。
MongoDB的单个示例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库:

  • admin:从权限的角度来看,这是”root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
  • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

文档

文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
需要注意到是:

  1. 文档中的键/值对是有序的
  2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
  3. MongoDB区分类型和大小写。
  4. MongoDB的文档不能有重复的键。
  5. 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

文档键命名规范:

  1. 键不能含有\0 (空字符)。这个字符用来表示键的结尾。
  2. .和$有特别的意义,只有在特定环境下才能使用。
  3. 以下划线”_”开头的键是保留的(不是严格要求的)。

集合

集合就是MongoDB文档组,集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
比如,我们可以将以下不同数据结构的文档插入到集合中:

1
2
{"site":"www.baidu.com"}  {"site":"www.google.com","name":"Google"}  
{"site":"www.runoob.com","name":"菜鸟教程","num":5}

当第一个文档插入时,集合就会被创建。

元数据

数据库的信息是存储在集合中。他们使用了系统的命名空间:

1
dbname.system.*

在MongoDB数据库中名字空间 .system.* 是包含多种系统信息的特殊集合(Collection),如下:

集合命名空间 描述
dbname.system.namespaces 列出所有名字空间。
dbname.system.indexes 列出所有索引。
dbname.system.profile 包含数据库概要(profile)信息。
dbname.system.users 列出所有可访问数据库的用户。
dbname.local.sources 包含复制对端(slave)的服务器信息和状态。

MongoDB 数据类型

数据类型 描述
String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer 整型数值。用于存储数值。
Boolean 布尔值。用于存储布尔值。
Double 双精度浮点值。用于存储浮点值。
Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Arrays 用于将数组或列表或多个值存储为一个键。
Timestamp 时间戳。
Object 用于内嵌文档。
Null 用于创建空值。
Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。。
Date 日期时间。
Object ID 对象 ID。用于创建文档的 ID。
Binary Data 二进制数据。用于存储二进制数据。
Code 代码类型。用于在文档中存储 JavaScript 代码。
Regular expression 正则表达式类型。用于存储正则表达式。
支持一下
扫一扫,支持xfan
  • 微信扫一扫
  • 支付宝扫一扫