NoSQL基础学习
NoSQL基础学习
最近学习的第一个Nosql就是Mongodb,为了了解Nosql的基本知识,特地总结,主要是学习Nosql的理论
一.Introduction(介绍)
它是“ Not Only Sql”的简称,非关系型数据库,它具有非常好的通用性和非常高的性能,它在处理大量的数据方面很有优势.
1.NoSql的出现是相对于传统的关系型数据库的,重点就是,Wiki上所说的:
NoSQL是對不同於傳統的關聯式資料庫的数据库管理系统的統稱。
兩者存在許多顯著的不同點,其中最重要的是NoSQL不使用SQL作為查詢語言。其數據存儲可以不需要固定的表格模式,也經常會避免使用SQL的JOIN操作,一般有水平可扩展性的特征。
那么它的出现的意义在哪?,答案就是随着在现代的计算系统上每天网络上都会产生庞大的数据量,而NoSQL就是在现代计算机领域必然出现的一种产物,至少我是这么认为的,当然,NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入,而且说到底NoSQL系统也就是分布式系统
这是一种全新的思维,就像学习算法一样,学习NoSQL,当然要学习它的特征,这是非常重要的,就像关系型数据库遵循了ACID规则,而NoSQL遵循了BASE规则,许多资料在介绍NoSQL时,都必然会对NoSQL进行比较,这里无不例外
2.发展历史
NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。
2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。
2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。因此,对NoSQL最普遍的解释是“非关聯型的”,强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。
基于2014年的收入,NoSQL市场领先企业是MarkLogic,MongoDB和Datastax。基于2015年的人气排名,最受欢迎的NoSQL数据库是MongoDB,Apache Cassandra和Redis。
二.Feature(特征)
NoSQL系统是分布式系统,分布式系统是建立在网上之上的软件系统,具有高度的透明性,在分布式数据库系统中,用户是感觉不到数据是分布的,就好像操作的是一个统一的整体,即用户不须知道关系是否分割、有无副本、数据库存于哪台机器及操作在哪台机器上执行,并不知道其内部工作需要由很多台机器协同完成。
1.CAP定理(分布式领域的CAP原则)
CAP原则又称CAP定理,指的是在一个分布式系统中:
- Consistency(强一致性),数据一致更新,所有数据变动都是同步的,更新一会后所有的节点在同一时刻具有相同的数据
- Availability(可用性),快速的响应性能,保证每个请求不管成功或者失败都有响应
- Partition tolerance(分区容错性),即可靠性,或者说系统中的某个节点发生错误,不会影响系统的继续运作
定理:任何的分布式系统只能同时满足其中两点,不可做到三者兼得,此理论在分布式存储系统中,最多只能实现上面两点
2.BASE思想(完全不同于ACID思想,牺牲了高一致性,获得可用性或者可靠性)
BASE思想(或者说是BASE模型),BASE是Basically Available(基本可用),Soft state(软状态/柔性事务)和Eventually consistent(最终一致性)的缩写:
- Basically Available(基本可用),支持分区失败(e.g.sharding碎片划分数据库)
- Soft state(软状态/柔性事务),状态可以有一段时间不同步,异步
- Eventually consistent(最终一致性),最终数据是一致的就可以了,而不是时时高一致
定理:主要强调基本的可用性,也就是如果追求高性能,那么就要牺牲一致性或者容错性,总之BASE思想是对CAP原则中的一致性和可用性权衡的结果
CAP原则是NoSQL数据库的基础,所以记住这个BASE思想和CAP原则!!!!
3.与NoSQL的关系
现在NoSQL就丰富了BASE思想,可按照具体的情况定制特别方案,相对关系型数据库的ACID原则,NoSQL系统通常注重性能和扩展性,而非ACID中的事务机制,事务就要求一致性
三.NoSQL 数据库分类
数据库分为四大类:
- 键值(Key-Value)存储数据库
- 列存储数据库
- 文档型数据库
- 图形(Graph)数据库
1.键值(Key-Value)存储数据库
是一种以键值对存储数据的一种数据库,类似Java的Map,每个键对应唯一的值,代表的
2.列存储数据库
通常是用来应对分布式存储的海量数据,是以列相关存储架构进行的数据存储的数据库,主要适合批量数据处理和即时查询
3.文档型数据库
该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高
4.图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API
NoSQL基础学习的更多相关文章
- SQL 基础学习(2) Joining 和function , 作业没有做,需要看百宝箱。NOsql的概念
SQL 基础学习(2) Joining 可以同时关联(joining)多张表进行复杂的查询. 相比于用Rails捞出数据再用Ruby进行过滤组合,使用SQL更加高效,节能. 以下是 users has ...
- 零基础学习openstack【完整中级篇】及openstack资源汇总
1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...
- PaaS基础学习(1)
PaaS基础学习(1) PaaS学习笔记目录 PaaS基础学习(1) 在PaaS上开发Web.移动应用(2) PaaS优点与限制(3) 1. 基础单元,一个基础单元就是所研究实体的最小的不可分割的单元 ...
- Spark基础学习精髓——第一篇
Spark基础学习精髓 1 Spark与大数据 1.1 大数据基础 1.1.1 大数据特点 存储空间大 数据量大 计算量大 1.1.2 大数据开发通用步骤及其对应的技术 大数据采集->大数据预处 ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- HTML5零基础学习Web前端需要知道哪些?
HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...
- python入门到精通[三]:基础学习(2)
摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...
随机推荐
- 几个有关FPGA的概念
<数字设计——原理和实践>(John F.Wakerly)的书 FPGA同步时钟设计 简单说就是 一个系统中(或系统中的一部分)都采用同一个时钟触发.系统中的(D)触发器全部都连接到一个时 ...
- 02python程序设计基础——字符串
字符串方法 format 1.替换字段名 在最简单的情况下,只需向 format 提供要设置其格式的未命名参数,并在格式字符串中使用未命名字段.此时,将按顺序将字段和参数配对.你还可给参数指定名称,这 ...
- jmeter性能压测瓶颈排查-网络带宽
问题: 有一台机器做性能压测的时候,无论开多少个线程,QPS一直压不上去,而服务器和数据库的性能指标(主要是CPU和内存)一直维持在很低的水平. 希望帮忙排查一下原因. 过去看了下进行压测的接口代码, ...
- GUI学习之十九——QFontComboBox学习总结
我们上一章学习了QComboBox的用法,这一章我们来看一下它的一个比较常用的子类:QFontComboBox(). 一.描述: QFontComboBox()是QComboBox()的一个子类,但是 ...
- @Component和@Bean以及@Autowired、@Resource
1. 有这么一个故事,从xml配置文件的bean说起 Spring用xml配置文件的时候(不知道阅读这篇文章的你用没用过,我用过一段时间,那是黑暗伤痛的回忆QQQ),一个xml配置文件里面有很多个 ...
- c++ printf和cout的性能
今天做了一道编程题,仔细检查了算法并没有错误,但是结果显示时间超时,但仍有80%的案例通过了,很奇怪. 通过将cin换成scanf,cout换成printf结果AC,实验发现二者性能差了很多,在输出1 ...
- postman-参数化
1.txt 1.如图第一行为变量名,下面行为对应的值 2.设置 Pre-request-Script 参数 data为文件名,username.password自定义参数名:在Tests最好加上断言 ...
- metaclass简单使用
metaclass : 元类, 就是创建python类对象的类 # 便用type动态创建类 # 1. 使用type创建一个User类对象 无基类,无属性 . () : 表示基类, {}:属性 User ...
- IDEA提交代码到github
GIT客户端安装及idea配置github账号并提交代码到GIT参考资料:https://blog.csdn.net/qq_31405633/article/details/88193119 1. 选 ...
- mybatis学习$与#号取值区别
1,多个参数传递用map或实体封装后再传给myBatis, mybatis学习$与#号取值区别 #{} 1.加了单引号, 2.#号写是可以防止sql注入,比较安全 select * from use ...