MongoDB进阶之路第二篇-NoSQL之MongoDB简介

版权声明:本文为博主原创文章,如果觉得写的不错需要转载,在转载时请注明博文出处! https://blog.csdn.net/Hello_World_QWP/article/details/82926841

             《 MongoDB进阶之路第二篇-NoSQL之MongoDB简介 》

关于 NoSQL :

NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论[2],来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。

2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。因此,对NoSQL最普遍的解释是"非关联型的",强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。

 

什么是NoSQL ?

NoSQL ( NoSQL = Not Only SQL ),翻译成中文即"不仅仅是 SQL"。在现代的计算系统上每天网络上都会产生庞大的数据量,这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。 1970  年  E.F.Codd's  提出的大型共享数据库的数据关系模型的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程更加简单。

NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至 2009 年趋势越发高涨。NoSQL 的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

 

为什么使用 NoSQL ?

在大数据(Big Data)、数据挖掘的今天,我们可以通过第三方平台(如:Baidu、Alibaba、Tencent、JD,以上简称BATJ等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加,这也成了一些大型互联网公司的一大法宝。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了,NoSQL数据库的发展也却能很好的处理这些大的数据。

 

NoSQL与传统关系型数据库(RDBMS)的区别:

RDBMS 特点:
    1、高度组织化结构化数据
    2、结构化查询语言(SQL)
    3、数据和数据之间的关系都存储在数据表中
    4、数据操纵语言DML(data manipulation language)、数据定义语言DDL(data definition language)、数据库控制语言 DCL(Data Control Language)
    5、支持事务(ACID)

NoSQL 特点:NoSQL 通常注重性能和扩展性,而非事务机制
    1、Not Only SQL、不仅仅是SQL
    2、没有声明性查询语言
    3、没有预定义的模式
    4、Key-Value,键 - 值对存储,列存储,文档存储,图形数据库
    5、最终一致性,而非ACID属性
    6、非结构化和不可预知的数据
    7、高性能,高可用性和可伸缩性
    8、CAP定理

这儿简要的介绍哈什么是 CAP 定理:

在计算机科学领域中,CAP定理(CAP theorem)又被称作 布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
    1、一致性(Consistency) (所有节点在同一时间具有相同的数据)
    2、可用性(Availability) (保证每个请求不管成功或者失败都有响应)
    3、分区容错性(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

 

CAP 理论的核心是:一个分布式系统不可能同时很好的满足一致性、可用性和分区容错性这三个需求,最多只能同时较好的满足两个。因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三大类:
    1、CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
    2、CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
    3、AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

 

NoSQL 的优点与缺点

优点:
    1、高可扩展性
    2、分布式计算
    3、低成本
    4、架构的灵活性,半结构化数据
    5、没有复杂的关系


缺点:
    1、没有标准化
    2、有限的查询功能(到目前为止)
    3、最终一致是不直观的程序

 

什么是 MongoDB ?

在前面,介绍了这么多,那到底什么是 MongoDB 呢 ?

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

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

 

MongoDB 的特点:

这儿总结并列出了一下13点(受于只是的限制,如果还有其它特点,请列在评论中,十分感谢):

1、MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
2、MongoDB 支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
3、MongoDB 使用 update() 命令可以实现替换完成的文档(数据)或者一些指定的数据字段。
4、MongoDB 中的 Map/reduce 主要是用来对数据进行批量处理和聚合操作。
5、可以在 MongoDB 记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
6、可以通过本地或者网络创建数据镜像,这使得 MongoDB 有更强的扩展性。
7、如果负载的增加(需要更多的存储空间和更强的处理能力) ,MongoDB 可以实现分布在计算机网络中的其他节点上这就是所谓的分片操作。
8、Map 和 Reduce。Map函数调用 emit(key,value) 遍历集合中所有的记录,将 key 与 value 传给 Reduce 函数进行处理。
9、Map 函数和 Reduce 函数是使用 Javascript 编写的,并可以通过 db.runCommand 或 mapreduce 命令来执行 MapReduce 操作。
10、MongoDB 允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
11、GridFS 是 MongoDB 中的一个内置功能,可以用于存放大量小文件。
12、MongoDB 支持各种编程语言:C、C++、C# /ASP.NET、Java、JavaScript、PHP、Python、Ruby、Scala等众多种语言。
13、MongoDB 简单易安装且易使用的特点(不同语言具体的使用,请参考官方文档 API 进行)。

 

 

常见的 NoSQL 数据库:

分类                        

数据库                                 

说明
文档存储

MongoDB,

CouchDB

文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。
Key-Value

Redis ,

Berkeley DB,

Tokyo Cabinet

通过 key 快速查询到其 value。一般来说,存储不管 value 的格式。(Redis 中 Value值的类型较多,有关 Redis 的相关内容,可以参考我相关的其它文章!)
列存储

Hypertable,

Hbase,

Cassandra,

这些都是按列存储数据库的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。
图存储

Neo4J,

FlockDB

这些都是图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用起来不方便。
xml 数据库

Berkeley DB,

BaseX

高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。
对象存储

db4o,

Versant

通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

 

 

 

 

 

CAP 参考自:百度百科

MongoDB 参考自: 百度百科

部分内容参考自:MongoDB 官网


好了,关于 MongoDB进阶之路第二篇-NoSQL之MongoDB简介  就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者: 华    仔
联系作者: [email protected]
来       源: CSDN (Chinese Software Developer Network)
原       文: https://blog.csdn.net/Hello_World_QWP/article/details/82926841
版权声明: 本文为博主原创文章,请在转载时务必注明博文出处!

猜你喜欢

转载自blog.csdn.net/Hello_World_QWP/article/details/82926841
今日推荐