《 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 |
版权声明: | 本文为博主原创文章,请在转载时务必注明博文出处! |