文档章节

mongoDB(1)——前序(NoSQL)

h
 haidao1992
发布于 2017/05/06 14:51
字数 1338
阅读 20
收藏 0

                                             mongoDB(1)——前序(NoSQL)

MongoDB是非关系型数据库的一种。在进入mongoDB的学习之前,我们先来了解一下非关系型数据库(NoSQL)。

        一、NoSQL的产生

             随着web2.0的兴起,特别是超大规模和高并发的网站对数据库提出了进一步的需求(大数据量引发的一系列问题),而关系型数据库面对这些新的需求,显得有些力不从心,例如:

             1. 面对数据库高并发读写的需求,关系数据库应付上万次sql查询还勉强顶的住,但是应付上万次sql写数据请求,硬盘IO就无法承受了。因为关系型数据库各个数据之间存在关联,为了进行join处理,不得不把数据存储在同一个服务器内,这样不利用数据分散,不具备写扩展性。

             2. 面对海量数据的高效率存储和访问的需求,在一张上万条甚至上亿条记录的表里进行sql查询,效率是极其低下的。关系型数据库是使用专门的sql语言进行数据读取的,它需要对sql语言进行解析,同时还有对表的锁定和解析这样的额外开销。

             3. 面对数据库的高可扩展性和高可用性的需求,因为关系型数据库的存储是建立在关系模型基础上的,当关系模型发生变动时,对于已经存储了大量数据的关系型数据库来说,是非常麻烦的事情。

            在新需求面前,关系数据库遇到了难以克服的障碍,而与此同时,web2.0对关系数据库的很多主要特性却往往要求不那么高,例如:

             1. 对数据库事务一致性的需求,很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。

             2. 对数据库的写实时性和读实时性需求,很多网站并不需要插入数据后立即显示。

             3. 对复杂的SQL查询,特别是多表关联查询的需求,任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,sql的功能被极大的弱化了。

           关系数据库在这些越来越多的应用场景下显得不那么合适了,为了解决这些问题,非关系型数据库应运而生。

 

         二、NOSQL优点

            1. 大数据量,高性能

                 NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库结构简单,这样,可以利用通过增加主服务器来实现数据库的读扩展性。而上面也说过了,面对大数据量的写入问题,关系型数据库还是存在压力的。

            2. 灵活的数据模型

               在关系型数据库中,每一张表就是一个关系模式的映射,当关系模型发生改变时,哪怕是很小的变更,都是很麻烦的,甚至还需要停机或者降低服务级别。

               而NoSQL的存储是模式自由的,无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,数据之间可以没有任何格式限制。

            3.  易扩展

               由于NoSQL数据库所存储数据之间的无关系性,使数据库易于扩展,而且,在架构的层面上也带来了可扩展的能力。

 

          三、NoSQL与关系型数据库设计理念的比较

              关系型数据库是建立在关系模型基础上的,借助于集合代数等数学概念和方法来处理数据库中的数据。其中每一张表就是一个关系模式的映射,每条记录字段的组成都一样,即使不是每条记录都需要所有的字段,但数据库也会为每条记录分配所有的字段。这样的结构便于表与表之间的关联。

              NoSQL数据库是模式自由的,存储的数据不局限于固定的结构,数据之间可以没有任何关系。这样的结构显得更加灵活,也减少了一些时间和空间的开销。

  

           四、总结

             NoSQL数据库的出现,弥补了关系型数据库在某些方面的不足,但从功能上讲,NoSQL的几乎所有功能,在关系数据库上都能满足,所以,选择NoSQL的原因并不在功能上,而是二者都有各自的特点和应用场景,两者的紧密结合将会给web2.0的数据库发展带来新的思路,让关系型数据库关注在关系上,非关系型数据关注在存储上。

          

本文转载自:http://blog.csdn.net/liusong0605/article/details/10548537

h
粉丝 1
博文 26
码字总数 27021
作品 0
浦东
程序员
私信 提问
有感而谈:MongoDB实战经验分享

  【IT168 评论】本文来自去年整理发布的“十天掌握MongoDB”系列PPT。该系列PPT的内容则来自当时的《MongoDB权威指南(英文版)》,个人翻译能力有限,不能保证PPT的内容完全符合该书的内容...

作者:陈彦铭
2012/04/26
0
0
MongoDB 文档阅读笔记—优雅的NoSQL

【IT168 技术】NoSQL 数据库在上年炒得很热,于是我也萌生了使用 NoSQL 数据库写一个应用的想法。首先来认识一下 NoSQL。NoSQL 是一个缩写,含义从最初的 No-SQL 到现在已经成为了 Not-Only...

作者:NoSQLfan
2012/04/06
0
0
NoSQL:选择MongoDB解决方案的理由

  【IT168 评论】近年来, NoSQL在IT界着实火了一把。不仅仅在互联网领域,越来越多的企业应用中,NoSQL也成为关系数据库管理系统(RDBMS)一种替代选项。   NoSQL的出现与流行是有原因的,...

作者:Altu Altnta 译者:Ranma
2013/07/15
0
0
搭建高可用mongodb集群(一)——配置mongodb

在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写、海量数据高效存储、高可扩展性和高可用性这些难题。不过就是因为这些问题Nosql诞生了。 NOSQL有这些优势: 大数据量...

观澜而索源
2013/11/18
296
0
将mongodb安装为windows服务

首先 下载mongodb: http://www.mongodb.org/downloads 解压到自己喜欢的一个目录 D:nosqlmongodb 配置MONGODB_HOME环境变量 MONGODB_HOME=D:nosqlmongodbmongodb-win32-i386-2.0.6 修改pat......

varlardoha
2013/01/15
10.4K
1

没有更多内容

加载失败,请刷新页面

加载更多

一起来学Java8(三)——方法引用

在一起来学Java8(一)——函数式编程中有一个简单的函数式编程的例子: import java.util.function.Consumer;class Person { public static void sayHello(String name) { S...

猿敲月下码
25分钟前
13
0
读书笔记:深入理解ES6(十一)

第十一章 Promise与异步编程   Promise可以实现其他语言中类似Future和Deferred一样的功能,是另一种异步编程的选择,它既可以像事件和回调函数一样指定稍后执行的代码,也可以明确指示代码...

张森ZS
49分钟前
19
0
面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
56分钟前
28
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
今天
23
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部