设为首页 加入收藏

TOP

MongoDB学习笔记(一)(一)
2017-10-13 10:43:53 】 浏览:6707
Tags:MongoDB 学习 笔记

1.MongoDB简介

 

MongoDB介绍

MongoDB是面向文档的非关系型数据库,不是现在使用最普遍的关系型数据库,其放弃关系模型的原因就是为了获得更加方便的扩展、稳定容错等特性。面向文档的基本思路就是:将关系模型中的“行”的概念换成“文档(document)”模型。面向文档的模型可以将文档和数组内嵌到文档中。因此,实际中可以用一条数据表示非常复杂的结构。
MongoDB没有预定义模式:文档的键(key)和值(value)不再是固定的类型和大小,而且根据需求要添加或者删除字段变得更容易了。由于没有模式需要更改,通常不需要迁移大量数据。不必将所有数据都放到一个模子里面,应用层可以处理新增或丢失的键。这样开发者可以非常容易地变更数据模型。
实际应用中,随着数据量的增大,数据库都要进行扩展。扩展有纵向扩展和横向扩展。纵向扩展是使用计算能力更强的机器,也是最省力的方法,但是很容易达到物理极限,无论花多少钱也买不到最新的机器了。横向扩展就是通过分区将数据分散到更多的机器上。MongoDB的设计采用横向扩展。面向文档的数据模型使它很容易地在多台服务器之间进行数据分割。还可以自动处理跨集群的数据和负载,自动重新分配文档,以及将用户请求路由到正确的机器上。开发者根本不用考虑数据库层次的扩展问题,需要扩展数据库时,在集群中添加机器即可,MongoDB会自动处理后续的事情。
MongoDB有如上各种特性,但为了达到这些,他也放弃了关系型数据库的某些功能如表连接join和复杂的多行事务。

2017-05-12_214955.png-8kB 
直观了解: 
2017-05-17_165633.png-13kB

 

MongoDB的优势与劣势

 

优势

  1. 快速!基于内存,将热数据存放在物理内存中(不仅仅只是索引和少部分数据),从而提高了整体速度和效率。
  2. 高扩展性!MongoDB的高可用和集群架构拥有十分高的扩展性。
  3. 自身的FailOver机制!在副本集中,当主库遇到问题,无法继续提供服务的时候,副本集将选举一个新的主库继续提供服务。
  4. JSon格式的数据!MongoDB的Bson和JSon格式的数据十分适合文档格式的存储与查询。
 

劣势

  1. 应用经验少!由于NoSQL兴起时间短,应用经验相比关系型数据库较少。
  2. 由于以往用到的都是关系型数据库,可能会造成使用者一开始的不适应。
  3. 无事务机制!MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。

 

2.MongoDB与MYSQL对比

数据库 MongoDB MySQL
数据库模型 非关系型 关系型
存储方式 以类JSON的文档的格式存储 不同引擎有不同的存储方式
查询语句 MongoDB查询方式(类似java script的函数) SQL语句
数据处理方式 基于内存,将热数据存放在物理内存中,从而达到高速读写 不同引擎有自己的特点
成熟度 新兴数据库,成熟度较低 成熟度高
广泛度 NoSQL数据库中,比较完善且开源,使用人数在不断增长 开源数据库,市场份额不断增长
事务性 仅支持单文档事务操作,弱一致性 支持事务操作
占用空间 占用空间大 占用空间小
join操作 MongoDB没有join MySQL支持join

下面是Mongodb与Mysql的操作命令的对比: 
2017-05-05_102256.png-15kB


 

MongoDB基础知识与CRUD

1.文档(document):相当于传统关系型数据库的“行”,但比传统行表示的信息更加复杂。例如:

 
{"name":"jack","age":18,"sex":"male"}

2.集合(collection):这个在MongoDB中代表一组文档,类似于关系型数据库中的表。但在MongoDB中的表(就是集合)是没有模式的,你可以将完全不同的文档放入同一个集合中.但在实际使用中,为特定集合隐性规定一种模式。注:当集合里没有任何文档时集合其实也是不存在的。当第一个文档插入时,集合就会被创建。 
3.数据库(database):在MongoDB中,一组集合可以组成一个数据库。一个MongoDB实例可以承载多个数据库。每个数据库都有独立的权限控制。在实际应用中,通常,一个应用的所有数据放置在一个数据库中。 
4.数据类型:MongoDB中的文档类似于JSON。JSON是一种简单的数据交换格式,在数据类型方面,只支持:null,布尔,数字,字符串,数组和对象。这几种类型在某些实际应用中表现力还是不够,比如JSON本身不直接支持日期类型,对于数字,JSON本身也没法区分整数和浮点数,更不能区分32位数字和64位数字。为此,MongoDB再保留了JSON的各类特性外,又为其添加了一些数据类型。 
1.null:用于表示空值或不存在的字段。Shell中这样表示:{"x":null} 
2.布尔:有两个值,true和false。Shell中这样使用:{"x":true} 
3.数字:Shell中数字均为64位浮点数,如在Shell中{"x":3.14}{"x":3}这两个文档中的值均是64位的浮点数。 
4.字符串:这个用的最广,Shell中这样表示:{"x":"hello world!"} 
5.日期:这个在数据存储时,存储的是从标准纪元开始的毫秒数,没有存储时区信息。 
6.正则表达式:文档中可以包含正则表达式,采用java script的正则表达式语法即可,Shell中这样表示:{"x":/foobar/i}
7.数组:数组是一组值,既可以表示为有序对象(列表,栈,队列等)也可以表示无序对象(集合),Shell中这样表示一个数组:{"things":["pie",3.14]}。 
8.内嵌文档:把一个文档整个作为另一个文档某一个键对应的值。 
其他包括二进制数据,代码等。

 

MongoDB入门(Shell基本操作)

运行mongo启动shell: 
2017-05-05_154321.png-3.8kB 
shell是一个功能完备的java script解释器,可运行任意的java script程序。这里不做示例。 
MongoDB的默认数据库为"db",该数据库存储在data目录中。 
1.选择数据库

#选择名test数据库
use tset

  

2017-05-05_154819.png-1.6kB 
如果忘记了数据库名称可以输入如下代码查询所有数据库名称:"show dbs" 命令可以显示所有数据的列表

 
show dbs

  

2017-05-05_154952.png-2.7kB 
查看数据库中的集合名:

 
show collections

  

结果如图所示: 
2017-05-05_161235.png-2kB&nbs

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一道CTF题引发的思考-MySQL的几个.. 下一篇重新格式化hadoop的namenode导致d..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目