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定理,指的是在一个分布式系统中:

  1. Consistency(强一致性),数据一致更新,所有数据变动都是同步的,更新一会后所有的节点在同一时刻具有相同的数据
  2. Availability(可用性),快速的响应性能,保证每个请求不管成功或者失败都有响应
  3. Partition tolerance(分区容错性),即可靠性,或者说系统中的某个节点发生错误,不会影响系统的继续运作

定理:任何的分布式系统只能同时满足其中两点,不可做到三者兼得,此理论在分布式存储系统中,最多只能实现上面两点

2.BASE思想(完全不同于ACID思想,牺牲了高一致性,获得可用性或者可靠性)

BASE思想(或者说是BASE模型),BASE是Basically Available(基本可用),Soft state(软状态/柔性事务)和Eventually consistent(最终一致性)的缩写:

  1. Basically Available(基本可用),支持分区失败(e.g.sharding碎片划分数据库)
  2. Soft state(软状态/柔性事务),状态可以有一段时间不同步,异步
  3. Eventually consistent(最终一致性),最终数据是一致的就可以了,而不是时时高一致

定理:主要强调基本的可用性,也就是如果追求高性能,那么就要牺牲一致性或者容错性,总之BASE思想是对CAP原则中的一致性和可用性权衡的结果

CAP原则是NoSQL数据库的基础,所以记住这个BASE思想和CAP原则!!!!

3.与NoSQL的关系

现在NoSQL就丰富了BASE思想,可按照具体的情况定制特别方案,相对关系型数据库的ACID原则,NoSQL系统通常注重性能和扩展性,而非ACID中的事务机制,事务就要求一致性

三.NoSQL 数据库分类

数据库分为四大类:

  1. 键值(Key-Value)存储数据库
  2. 列存储数据库
  3. 文档型数据库
  4. 图形(Graph)数据库

1.键值(Key-Value)存储数据库

是一种以键值对存储数据的一种数据库,类似Java的Map,每个键对应唯一的值,代表的

2.列存储数据库

通常是用来应对分布式存储的海量数据,是以列相关存储架构进行的数据存储的数据库,主要适合批量数据处理和即时查询

3.文档型数据库

该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高

4.图形(Graph)数据库

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API

NoSQL基础学习的更多相关文章

  1. SQL 基础学习(2) Joining 和function , 作业没有做,需要看百宝箱。NOsql的概念

    SQL 基础学习(2) Joining 可以同时关联(joining)多张表进行复杂的查询. 相比于用Rails捞出数据再用Ruby进行过滤组合,使用SQL更加高效,节能. 以下是 users has ...

  2. 零基础学习openstack【完整中级篇】及openstack资源汇总

    1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...

  3. PaaS基础学习(1)

    PaaS基础学习(1) PaaS学习笔记目录 PaaS基础学习(1) 在PaaS上开发Web.移动应用(2) PaaS优点与限制(3) 1. 基础单元,一个基础单元就是所研究实体的最小的不可分割的单元 ...

  4. Spark基础学习精髓——第一篇

    Spark基础学习精髓 1 Spark与大数据 1.1 大数据基础 1.1.1 大数据特点 存储空间大 数据量大 计算量大 1.1.2 大数据开发通用步骤及其对应的技术 大数据采集->大数据预处 ...

  5. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  6. 如何从零基础学习VR

    转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...

  7. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

  8. HTML5零基础学习Web前端需要知道哪些?

    HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...

  9. python入门到精通[三]:基础学习(2)

    摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...

随机推荐

  1. PAT Basic 1024 科学计数法 (20 分) Advanced 1073 Scientific Notation (20 分)

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指 ...

  2. Linux日常之定时向文件传内容

    一. Linux中定时执行任务使用的命令是crontab 流程如下: 1. 使用命令crontab -e进入编辑界面 2. [Ctrl]+X进行保存退出 3. 重启crontab服务,这样才可以生效, ...

  3. PCA 主成分分析

    链接1 链接2(原文地址) PCA的数学原理(转) PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表 ...

  4. 基本数据类型、包装类、String类型之间的相互转换

    @Testpublic void test2(){//基本数据类型.包装类-->到String类型的转换,调用String类型的静态方法valueOf()即可int i1 = 12;String ...

  5. 应用程序不了找到mysql中的表,客户端可以正常打开表

    原因是mysql中区分大小写的参数:lower-case-table-names=1  默认是区分大小写的,程序中代码可能是大小写混合的,其中访问数据库的sql是大小写混合的.所以找不到数据库中的表 ...

  6. Pymongodb

    首先安装pymongo模块 pip install pymongo 利用Python程序完成增删改查 import pymongo import json from bson import Objec ...

  7. Java使用wait() notify()方法操作共享资源详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 Java多个线程共享资源: 1)wait().notify()和notifyAll()方法是本地方法,并且为final方 ...

  8. 【leetcode】1104. Path In Zigzag Labelled Binary Tree

    题目如下: In an infinite binary tree where every node has two children, the nodes are labelled in row or ...

  9. 【微信小程序】基础组件--view text image

    组件的通用属性: id class style hidden bind* catch* data-* view 小程序基础组件,基本等于最常用组件,类似于HTML中的div.view用于构建页面骨架, ...

  10. vue-cli3取消eslint

    遇到这样的空白报错问题,删除这行代码就行