第一章 走进MongoDB

1.1NoSQL是什么?
     
1.1.1NoSQL简介

       对于不了解NoSQL的人都会认为NoSQL为No SQL,即不是SQL。但是这种理解是错误的,NoSQL应该是Not Only SQL,翻译过来为不仅仅是SQL。从这个翻译中我们可以看出来,NoSQL仍然还是SQL。

NoSQL是一场反SQL的革命性的数据库运动,在很早就有人提出来,但是一直没有很好地发展,直到互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。

今天NoSQL泛指这样一类数据库和数据存储,它们不遵循经典关系型数据库(RDBMS)原理,且常与Web规模的大型数据集有关。

     
1.1.2NoSQL发展背景及优势


随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,暴漏许多问题,例如:


1、
High performance - 对数据库高并发读写的需求


web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求。


2、
Huge Storage - 对海量数据的高效率存储和访问的需求


对于大型的SNS网站,每天用户产生海量的用户动态,以国外的Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,


3、
High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求


在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来实现扩展呢?

在上面提到的“三高”需求面前,关系数据库遇到了难以克服的障碍,而对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地,例如:


1 数据库事务一致性需求


2 数据库的写实时性和读实时性需求


3 对复杂的SQL查询,特别是多表关联查询的需求


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


NoSQL 是非关系型数据存储的广义定义。它打破了长久以来关系型数据库与ACID理论大一统的局面。NoSQL 数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势。该术语在 2009 年初得到了广泛认同。


NoSQL数据库有以下优点:


1 简单的扩展


2 快速的读写


3 低廉的成本


4 灵活的数据类型


NoSQL虽然优点众多,但是它还是有缺点的,例如:


1 不提供对SQL的支持

2 产品混乱,许多缺乏厂商的支持

1.1.3NoSQL现状
随着web2.0的发展和更多的NoSQL数据库的努力,现在越来越多的NoSQL数据库变得更加的完善,功能更加的强大,部分数据库已经完全能够达到商用的要求了。越来越多的企业开始使用NoSQL数据库了,例如下面列出的部分企业:
新浪微博  redis
Google    BigTable
Amazon   SimpleDB
视觉中国网站  MongoDB
优酷运营数据分析  MongoDB
豆瓣社区   BeansDB
……

目前NoSQL数据库主要分为key-value数据库、文档型数据库、列式数据库、图形数据库。
Key-value数据库是一种以键值对存储数据的一种数据库,类似java中的map。可以将整个数据库理解为一个大的map,每个键都会对应一个唯一的值。Key-value数据库代表的有redis。Redis是一个Key-Value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。另外redis是一种内存型的数据库,所以可以对外提供很好地读写操作,但是同样也暴露出内存占用高,数据持久化不易等问题。
列式数据库是以列相关存储架构进行数据存储的数据库,主要适合与批量数据处理和即席查询。传统的行式数据库,是按照行存储的,维护大量的索引和物化视图无论是在时间(处理)还是空间(存储)方面成本都很高。而列式数据库恰恰相反,列式数据库的数据是按照列存储,每一列单独存放,数据即是索引。只访问查询涉及的列,大大降低了系统I/O,每一列由一个线来处理,而且由于数据类型一致,数据特征相似,极大方便压缩。行式数据库擅长随机读操作,列式数据库则更擅长大批量数据量查询。
图形数据库又称图数据库,是一种非关系型数据库,它应用图形理论存储实体之间的关系信息。最常见的一个例子,就是社会网络中人与人之间的关系。关系型数据库用于存储“关系型”数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。比较有名的图数据库是Neo4j。。它是一个可嵌入,基于磁盘的Java持久化引擎,其数据存储采用图形结构来代替表格。一张graph就是一种网状的结构图更适合于敏捷、快速开发。特性:能够以直观,面向图形的方式展示数据,网状结构图由节点,关联和属性组成。Neo能够在单一计算机上处理几十亿个节点,关联和属性。
文档数据库不是文档管理系统。刚接触NoSQL的开发者常会混淆文档数据库和文档/内容管理系统。文档数据库中的文档一词意指文档中松散结构的键/值对集合,通常是JSON(JavaScript Object Notation,JavaScript对象表示法),而非一般意义的文档或表格(尽管它们也能被存储)。文档数据库把文档当作一个整体,不会将文档分割成多个键/值对。在集合层面上,这使得不同结构的文档可以放在同一个集合里。文档数据库支持文档索引,不仅包括主标识符,还包括文档的属性。当今为数不多的开源文档数据库中,最声名远扬的要数MongoDB和CouchDB。

MongoDB自学笔记1----1.1 NoSQL是什么?的更多相关文章

  1. MongoDB自学笔记2---1.2 初识MongoDB

    1.2.1MongoDB简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之 ...

  2. MongoDB 学习笔记(原创)

    MongoDB 学习笔记 mongodb 数据库 nosql 一.数据库的基本概念及操作 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table ...

  3. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  4. MongoDB学习笔记(六)--复制集+sharding分片 && 总结

    复制集+sharding分片                                                               背景 主机 IP 服务及端口 Server A ...

  5. MongoDB学习笔记(四)--索引 && 性能优化

    索引                                                                                             基础索引 ...

  6. Hadoop自学笔记(一)常见Hadoop相关项目一览

    本自学笔记来自于Yutube上的视频Hadoop系列.网址: https://www.youtube.com/watch?v=-TaAVaAwZTs(当中一个) 以后不再赘述 自学笔记,难免有各类错误 ...

  7. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  8. Mongodb学习笔记一(Mongodb环境配置)

    Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...

  9. 《Linux内核设计与实现》课本第四章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵 ...

随机推荐

  1. Codeforces Round #267 (Div. 2)D(DFS+单词hash+简单DP)

    D. Fedor and Essay time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. OCP-1Z0-051-题目解析-第5题

    5. Which SQL statements would display the value 1890.55 as $1,890.55? (Choose three .) A. SELECT TO_ ...

  3. 2.2 LINQ中使用from子句指定数据源

    数据源是LINQ查询中必不可少的元素,数据源是实现泛型接口IEnumerable<T>或IQueryable<T>的类对象. 可以将IEnumerable<T>简单 ...

  4. android:由URL载入中ImageView

    两种方法: 方法一: Bitmap bimage= getBitmapFromURL(bannerpath); image.setImageBitmap(bimage); public static ...

  5. 使用UDL文件来测试SQL Server数据库连接

    原文 来自http://www.2cto.com/database/201308/234427.html 使用UDL测试SQL Server连接问题   做数据库经常会遇到SQL Server连接的问 ...

  6. 什么是Solr搜索

    什么是Solr搜索 一.Solr综述   什么是Solr搜索 我们经常会用到搜索功能,所以也比较熟悉,这里就简单的介绍一下搜索的原理. 当然只是介绍solr的原理,并不是搜索引擎的原理,那会更复杂. ...

  7. 解决easyui datagrid load时缓存问题

    修改easyui datagrid内容保存后,使用$("#dg").datagrid("reload");或者$("#dg").datagr ...

  8. 转: js快速分享代码

    这是一款简单易用的文章分享工具,您只需将下面的html代码拷贝到模板中就可以实现文章快速分享功能.如果您想分享你的博客.个人网站或者企业网站等等,下面是两款不错的分享工具,值得拥有! 1. [html ...

  9. android中怎么调整字体的间距和行间距

    在网页中都是很轻松的就可以调整间距的.在android中,我个人并没有去设置过. 下面就来说说android中的间距问题. 原文:http://blog.csdn.net/fancylovejava/ ...

  10. How feedback work for your improvement

    Why generally feedback is the perspective from others for some event. In China there is story,some k ...