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中 ...
随机推荐
- Linux用户的基本操作1 用户相关信息 及useradd /usermod 部分
目录 linux 用户管理 - 用户的基本操作 用户管理 用户的相关命令 linux 用户管理 - 用户的基本操作 用户管理 1.什么是用户? 用户指的是能够正常登录Linux或windows系统 2 ...
- rev 反向输出文件内容
1.命令功能 rev 按行反向输出文件内容 2.语法格式 rev file 3.使用范例 [root@localhost ~]# echo {a..k} >> test [root@lo ...
- Codeforces 960 二进制构造子序列 完全二叉树shift模拟 主席树/MAP DP
A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #def ...
- 笔记42 Spring Web Flow——Demo(2)
转自:https://www.cnblogs.com/lyj-gyq/p/9117339.html 为了更好的理解披萨订购应用,再做一个小的Demo. 一.Spring Web Flow 2.0新特性 ...
- Manjaro系统和软件安装记录
Linux桌面环境 ArchLinux官方wiki manjaro官方wiki pacman官方wiki 从www.distrowatch.com可以查看Linux发行版排行榜,可以看到manjar ...
- 小程序里的自定义组件:组件的外部样式externalClasses的使用
启用外部样式: 自定义组件: v-tag 在html 引入 在组件写外部样式的css : .ex-tag { background-color: #fffbdd ; } 在组件使用该外部的样式 这个时 ...
- Arduino-舵机
舵机一般都外接三根线,一般棕色为接地线(GND),红色为电源正极线(VCC),橙色为信号线(PWM). 用Arduino控制舵机的方法有两种: 一种是通过Arduino的普通数字传感器接口产生占空比不 ...
- 详解Spring MVC 集成EHCache缓存_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 废话少说,直接上代码: ehcache.xml 文件 <?xml version="1.0" ...
- Math.min() Math.max() Math.min().apply() Math.max() .apply()该如何使用???
Math.min()和 Math.max() 语法: Math.min(x,y) Math.max(x,y) 虽然能取到最小值和最大值,但是不支持数组. 那么如何计算数组中的大小值呢???????? ...
- A标签跳转链接并修改样式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...