广告
返回顶部
首页 > 资讯 > 数据库 >【NoSQL】01、NoSQL基础
  • 271
分享到

【NoSQL】01、NoSQL基础

2024-04-02 19:04:59 271人浏览 独家记忆
摘要

一、ACID、分布式、CAP、BASE 理论关系型数据库遵循ACID规则       事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性


一、ACID、分布式、CAP、BASE 理论

关系型数据库遵循ACID规则

       事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:

1、A (Atomicity) 原子性

        原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。

比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。

2、C (Consistency) 一致性

       一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。

例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。

3、I (Isolation) 独立性或隔离性

       所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。

比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。

4、D (Durability) 持久性

        持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。


分布式系统

       分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。

分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。

因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。

分布式系统可以应用在在不同的平台上如:Pc、工作站、局域网和广域网上等。


分布式计算的优点

可靠性(容错) :

           分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。

可扩展性:

           在分布式计算系统可以根据需要增加更多的机器。

资源共享:

         共享数据是必不可少的应用,如银行,预订系统。

灵活性:

         由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。

更快的速度:

       分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度。

开放系统:

       由于它是开放的系统,本地或者远程都可以访问到该服务。

更高的性能:

       相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。


分布式计算的缺点

故障排除:

        故障排除和诊断问题。

软件:

       更少的软件支持是分布式计算系统的主要缺点。

网络:

        网络基础设施的问题,包括:传输问题,高负载,信息丢失等。

安全性:

        开放系统的特性让分布式计算系统存在着数据的安全性和共享的风险等问题。

CAP定理(CAP theorem)

       在计算机科学中, CAP定理(CAP theorem), 又被称作布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性(Consistency) 

  •          所有节点在同一时间具有相同的数据

  • 可用性(Availability) 

  •         保证每个请求不管成功或者失败都有响应

  • 分隔容忍(Partition tolerance)也被称为分区容错性

  •          系统中任意信息的丢失或失败不会影响系统的继续运作

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:

  • CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。

  • CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。

  • AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

【NoSQL】01、NoSQL基础 


BASE

BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

BASE是Nosql数据库通常对可用性及一致性的弱要求原则:

  • Basically Availble   -- 基本可用

  • Soft-state        -- 软状态/柔性事务。 "Soft state" 可以理解为"无连接"的, 而 "Hard state" 是"面向连接"的

  • Eventual Consistency  -- 最终一致性(也称弱一致性);也是是 ACID 的最终目的。


ACID vs BASE

ACIDBASE
原子性(Atomicity)基本可用(Basically Available)
一致性(Consistency)软状态/柔性事务(Soft state)
隔离性(Isolation)最终一致性 (Eventual consistency)
持久性 (Durable)

  ACID:强一致性、隔离性、采用悲观保守的方法、难以变化

  BASE:弱一致性、可用性优先、采用乐观的方法,易于适应变化,更简单、更快


最终一致性细分:

    因果一致性       

    读自己写一致性

    会话一致性

    单调读一致性、时间轴一致性(也被称为单调写一致性)

  

数据一致性的实现技术:

  NRW:

  2PC:二段式提交,是一种协议能保证强一致性

  Paxos,

  Vector Clock:向量时钟


二、NoSQL概述

1、NoSQL简介

1998,NoREL

2009,NoSQL 正式提出

   NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL";NoSQL 是一种技术流派,而不是一种特定的技术

         在现代的计算系统上每天网络上都会产生庞大的数据量,这些数据有很大一部分是由关系数据库管理系统(RDMBSs)来处理。 1970年 E.F.Codd's提出的关系模型的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程更加简单。通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。

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


什么是NoSQL?

       NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

       NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

为什么使用NoSQL ?

       今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。

【NoSQL】01、NoSQL基础



2、大数据问题 BigData,海量数据

 1)大数据四大管理系统(存储)

       并行数据库系统:传统RDBMS水平切分,分区查询

    NoSQL数据库管理系统:非关系模型、分布式、不支持ACID数据库设计范式

    NewSQL数据库管理系统:力图在分布式上实现ACID,或在ACID上实现分布式

          SQL为什么很难实现分布式?

             日志:分布式系统中,日志是一个障碍

             :悲观并发控制,大量的锁,1个资源被1个进程使用时,另一个进行需要使用这个资源时需要等待

             缓冲区管理:多个节点的缓冲区如何实现数据交互

          开源解决方案:

             Clustix,GenieDB,ScaleArc,ScaleBase,NimbusDB,Drizzle

       云数据管理系统:

 2)大数据的分析处理

    mapReduce


3、NoSQL的技术特点

非关系型,分布式(符合CAP,BASE理论),不提供ACID

简单数据模型(如Key-Value)

元数据和应用数据分离

   元数据用于数据管理,需要专门的元数据管理节点

弱一致性,通过技术方案支持最终一致性 

高吞吐能力

较高水平扩展能力和低端硬件集群


4、NoSQL的优势

避免不必要的复杂性

不使用对象 - 关系映射


5、NoSQL的劣势

数据模型和查询语言没有经过数学验证

不支持ACID(事务)

功能简单

没有统一的数据查询模型(关系型数据库的SQL)


三、数据存储模型

    NoSQL的各种流派就是根据数据存储模型来划分的

NoSQL 数据库分类

类型部分代表


特点
列存储

HBase

Cassandra

Hypertable

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

文档存储

mongoDB

CouchDB

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

key-value存储

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)

图存储

Neo4J

FlockDB

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

对象存储

db4o

Versant

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

xml数据库

Berkeley DB XML

BaseX

高效的存储XML数据,并支持XML的内部查

列式模型:

     应用场景:在分布式文件系统之上提供支持随机读写的分布式数据存储

     典型产品:HBase、Hypertable、Cassandra

数据模型:以“列”为中心进行存储,将同一列数据存储在一起

     优点:快速查询、高可扩展性、易于实现分布式扩展


文档模型:

应用场景:非强事务需求的WEB应用

典型产品:MongoDB、elasticsearch、CouchDB、CouchBase Server

数据模型:键值模型,将数据存储为文档

优点:数据模型无须事先定义


键值模型:

应用场景:内容缓存,用于大量并行数据访问高负载场景

典型产品:DynamoDB、Riak、Redis

数据模型:基于哈希表实现的key-value

优点:查询迅速


图式模型:

     应用场景:社交网络、推荐系统、关系图谱

典型产品:Neo4j、Infinite Graph

数据模型:图式结构

优点:适应于图式计算场景



您可能感兴趣的文档:

--结束END--

本文标题: 【NoSQL】01、NoSQL基础

本文链接: https://www.lsjlt.com/news/41643.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【NoSQL】01、NoSQL基础
    一、ACID、分布式、CAP、BASE 理论关系型数据库遵循ACID规则       事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性...
    99+
    2022-10-18
  • 57-1、2、3 NoSQL基础及MongoDB、Mongo
    02MongoDB基本应用配置环境:node1:192.168.1.121CentOS release 6.7[root@node1 ~]# cd mongodb-2.6.4/[root@node1 mon...
    99+
    2022-10-18
  • NoSQL理论基础及安装、基本操作
    30分钟开始分布式系统理论:CAP:    一致性    可用性    分区容错性Mo...
    99+
    2022-10-18
  • 【MongoDB】01、MongoDB基础
    一、MongoDB概述1、MogoDB简介什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能...
    99+
    2022-10-18
  • Day-01 Python基础
    一、Python介绍   Python是一门解释型,弱类型,高级开发编程语言;可广泛应用于众多领域,如:网页开发,数据分析,爬虫等众多领域。   目前Python主要应用领域:云计算、web开发、科学运算、人工智能、系统运维、金融。   ...
    99+
    2023-01-30
    基础 Day Python
  • Mysql基础01-语法
    数据库 数据的存储:将数据放到表中,表再放到库中。 一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。 表由列组成,我们也称为字段。每个字段描述了它所含有的数据的意义表由列组成,我们也称为字段。每个字段描述了它所含...
    99+
    2021-08-31
    Mysql基础01-语法
  • 01. Oracle(基础语法)
    1. 函数 1.1 大小写转换函数 函数 描述 LOWER() 全小写 UPPER() 全大写 INITCAP() 首字母大写 1.2 字符串操作函数 函数 描述 concat() 拼接字...
    99+
    2022-03-14
    01. Oracle(基础语法)
  • NoSQL数据库一MongoDB基本使用
    如今的网站对数据存储要求越来越灵活,在这种需求下 NoSQL 也就是非关系数据库越来越流行。所谓非关系数据库,是指不使用 SQL 语言进行数据操作的数据库的统称。这类数据库存储数据时没有固定的模式,不支持数...
    99+
    2022-10-18
  • Redis基础教程第2节 Redis和NoSql 介绍与应用场景
    NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,...
    99+
    2022-10-18
  • 01、数据库基础篇
    1. 什么是数据库 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中,但是在文件中读写数据...
    99+
    2021-07-30
    01 数据库基础篇
  • python学习笔记01-基础
    数据类型:(1)整数(2)浮点数整数和浮点数在计算机内部存储的方式是不同的(3)字符串字符\本身也要转义,所以\表示的字符就是\Python还允许用r''表示''内部的字符串默认不转义(4)布尔值在Python中,可以直接用True、F...
    99+
    2023-01-31
    学习笔记 基础 python
  • 01月29日【Python3 基础知识】
    5.4 参数匿名函数字典排序 5.5 生成式和生成器 5.6 装饰器的作用 5.4 参数匿名函数字典排序 # *元组;**字典 def add(*args): total = 0 for i in args: ...
    99+
    2023-01-31
    基础知识
  • 01月19日【Python3 基础知识】
    2.1 数据类型 2.2 字符串 2.3 list操作 2.1 数据类型 # Ptyhon运算符 ''' 数字运算符: + - * / % 关系运算符: a == b a>b a<b a!=b >= ...
    99+
    2023-01-31
    基础知识
  • 01月25日【Python3 基础知识】
    4.1 读写文件 4.2 文件方法 4.3 python2的乱码问题 4.4 python对passwd文件进行排序 4.1 读写文件 访问 模式 说 明 r 以只读方式打开文件。文件的指针将会放在文件的开头...
    99+
    2023-01-31
    基础知识
  • 01月23日【Python3 基础知识】
    3.1 if/while/for 3.2 解决数学难题 3.3 Python实例 3.1 if/while/for ''' # if 判断条件: 执行语句 elif 判断条件: 执行语句 else: 执...
    99+
    2023-01-31
    基础知识
  • 01月24日【Python3 基础知识】
    3.4 统计字符串 3.5 乘法口诀 3.4 统计字符串 # 统计字符串给类型符号个数 s = n = f = 0 st = input("随意输入字符:") for i in st: if i.isalpha(): ...
    99+
    2023-01-31
    基础知识
  • 01月22日【Python3 基础知识】
    2.4 计算器 2.5 tuple操作 2.6 dict 2.7 其他常用操作 2.4 计算器 def add(string): total = 0 numbers = [] numbers += s...
    99+
    2023-01-31
    基础知识
  • 01月26日【Python3 基础知识】
    5.1 九宫格 5.2 函数入门 5.3 判断某天为某年的第几天 5.1 九宫格 import random x = 0 l = [1,2,3,4,5,6,7,8,9] print("*************") while...
    99+
    2023-01-31
    基础知识
  • 01月18日【Python3 基础知识】
    1.1 Python的安装1.2 pycharm安装1.3 pycharm快捷键1.4 pycharm其他设置 1.1 Python的安装 Python的重要性 python 流行程度 近几年内已经挤进前五名,慢慢已经成为一个开发者或运...
    99+
    2023-01-31
    基础知识
  • 基于.net ,使用几种常见的NoSQL数据库
    目录 0 .net中的缓存对象 1.MemCached 2.Redis 3.MongoDB 示例...
    99+
    2017-10-10
    基于.net 使用几种常见的NoSQL数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作