NoSQL简史及定义


NoSQL 这个术语最早是在 1998 年被Carlo Strozzi命名在他的轻量的,开源的关系型数据库上的,但是该数据库没有提供标准的SQL接口;
2009 年再次被Eric Evans提起,讨论分布式开源数据库的问题,这是的NoSQL主要指的非关系型,分布式的,不提供关系型的atomicity(A)consistency(C)isolation(I)durability(D) 即ACID的特性;
紧接着2009年在亚特兰大举行的no:sql讨论会是一个里程碑,当时的口号是select fun, profit from real_world where relational=false,因此之后对于NoSQL最普遍的解释为非关系型的,强调Key-ValueDocument(文档)数据库的优点,并非单纯的反对关系型数据库;

下面给NoSQL下一个定义,如果你在网上查阅资料会得到很多种定义,大家的理解不尽相同,我这里引用 http://nosql-database.org/ 网站上的定义:下一代,主要解决以下几点:非关系数据库、分布式数据库、开源数据库和水平扩展数据库

原文信息:Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable
对于 NoSQL这个词语,现在最普遍的理解就是:Not Only SQL

常见的NoSQl数据库以及分类

NoSQL 仅仅是一个概念,还可以根据数据库存储数据的模型和特点分为以下种类

  • Key-Value 存储,代表数据库为 Redis ,可以通过Key快速的查找到对应的Value值,非常适合存储不涉及过多数据关系的业务数据,一般保存在内存中,可以有效的减少读写磁盘的IO次数,提高了读写性能
  • Documnet 文档型 存储,代表数据库为 MongoDB, 文档的内容一般使用类似JSON的格式,存储的内容就是文档型的,由于文档数据库的no-schema的特性,可以存储和读取任意的数据,很好的解决的数据结构字段不确定的问题。对于文档型的数据库,一般是可以在某个字段上建立索引的等,文档之间可以进行关联,也就是说可以实现一些关系型数据库的功能特性
  • XML 存储,代表数据库为 Berkeley DB XMl(BDB XML) ,是一个嵌入式数据库,专门用于存储和检索XML格式的文档,支持XQuery这种查询语言对XML文档进行高效的查询
  • Graph 图存储 代表数据库为 Neo4J 为最流行的图数据库,应用图形理论(这里可以学习一下有关图的数据结构)存储实体之间的关系信息,最常见的应用就是保存社交网络中人与人之间的关系比如微信好友之间的关系,还可以使用在推荐系统,如果我们将数据以图的形式表现,那么将会非常有益于推荐规则的制定,这类数据库可以很方便了解决了关系型数据库存储这类数据的缺点,查询慢,设计复杂的问题
  • Column 列存储 代表数据库为 HBase ,传统的关系型数据库是按照行来存储数据的,因此可以称为“行数据库”,而列数据库是按照列来进行存储数据的,使用列存储可以的根据某一列数据类型特征选择不同的算法来压缩数据,提高存储空间的利用率;当读取多条数据的同一列的时候,读取效率非常高,因为这些列的数据都放在一起存储的;该类型的数据库适合大量的数据存储的应用场景不适合小量的数据存储的应用场景,多用于大数据处理方面
  • Object 对象存储 代表数据库 db4o 该类型的数据库用的不多,主要特点是:通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据

对于现在我们听说的ElasticsearchNoSQL的关系可以查这篇文章 https://www.elastic.co/cn/blog/found-elasticsearch-as-nosql ,可以把它归类为文档数据库的一种

对于非常详细的NoSQL数据库分类和NoSQL列表的详细信息(现已经超过255个了)可以查看这个网站 http://nosql-database.org/

关系型数据库与NoSQL数据库的区别

关系型数据库特点

  • 高度组织化,结构化数据
  • 结构化查询语言(SQL)
  • 数据操作语言(DML),数据定义语言(DDL)
  • 多表之间进行关联查询(join)
  • 严格的一致性(事务处理)
  • ACID模型

对于关系型数据库的事务ACID特性,这里做一下解释:

  • A(Atomicity): 原子性,原子的概念就是不可分隔,也就是说事务中的操作要么全部完成,要么都不做,事务成功的条件是事务中的所有操作都成功,只要事务中有一个操作失败,真个事务就失败,就行回滚
  • C(Consistency): 一致性,指进行事务操作后,由原来的一致性状态变成另一种一致性的状态,也就是事务提交后,或者事务回滚后,数据库的完整性一致性约束不能被破坏。任何数据写入数据库必须是有效的根据已定义的规则,包括约束,触发器,任何组合,引用完整性保证主键,外键关系
  • I(Isolation): 隔离性,事务之间不会相互影响,每个事务是彼此独立的,也就是在一个事务提交之前对其他事务是不可见的
  • D(Durability): 持久性,指一旦事务提交后,它所做的修改将会永久的保存在数据库中,即使出现服务宕机也不会丢失

NoSQL数据库特点

  • 没有固定的数据结构,键-值对存储,列存储,文档存储,图形数据库,可以灵活的进行扩展
  • 没有标准的查询话语言,几乎每一种NoSQL数据库都会有自己独特的查询语言
  • 最终一致性,非ACID
  • CAP模型
  • 高性能,可扩展,非常容易进行水平扩展
 说明:这里CAP只是简单提了一下,在下一篇会有文章专门来解释CAP定理

NoSQL和SQL的区别

  • 关系型数据库基于ACID模型,NoSQL非关系型基于CAP模型
  • 数据存储结构:关系型数据库一般都是固定的表结构,通过DDL语句来进行修改,不是很容易进行扩展;而NoSQL非关系型存储的机制就比较多了,就如上面所说的基于文档的,基于键-指的等等,对数据的格式十分灵活没有固定的表结构,方便进行扩展
  • 数据的一致性:NoSQL非关系型数据库强调最终一致性,没有像关系型数据库ACID强调强一致性,从非关系型数据库中读到的有可能还是处于一个中间态的数据,因此如果你的业务对于数据的一致性要求很高,那么非关系型数据库并不一个很好的选择

思考:对于关系型数据库NoSQL非关系型数据库 你有什么样不同的理解,欢迎留言讨论。

Redis-NoSQL入门和概述(一)的更多相关文章

  1. Redis(一):NoSQL入门和概述

    NoSQL入门和概述目录导航: NoSQL入门概述 3V+3高 当下的NoSQL经典应用 NoSQL数据模型简介 NoSQL数据库的四大分类 在分布式数据库中CAP原理CAP+BASE NoSQL 入 ...

  2. Redis学习一:Nosql入门和概述

    现在Redis越来越火,为了适应技术的发展,开始学习一下Redis,在学习Redis之前先学习一下Nosql. 第一部分:入门概述 1.1 互联网时代背景下大机遇,为什么用nosql 1.1.1 单机 ...

  3. Redis之NoSql入门和概述(二)

    2. 什么是NoSQL?    2.1 NoSQL 概述   NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库.随着互联网web2.0网站的兴起, ...

  4. Redis之NoSql入门和概述(一)

    1. 为什么用 NoSQL? NoSQL指的是非关系型的数据库,NoSQL也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称.NoSQL用于超大规模数据的存储.这 ...

  5. 1.NoSQL入门和概述

    入门概述: 1.为什么要用到NoSQL a)  单机MySQL的美好年代,在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付.在那个时候,更多的都是静态网页,动态交互类型的网站不多. ...

  6. 一篇文章带你了解NoSql数据库——Redis简单入门

    一篇文章带你了解NoSql数据库--Redis简单入门 Redis是一个基于内存的key-value结构数据库 我们会利用其内存存储速度快,读写性能高的特点去完成企业中的一些热门数据的储存信息 在本篇 ...

  7. Redis - NoSQL数据库技术(一)

    NoSQL入门概述(一) 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 什么是NoSQL NoSQL(NoSQL - Not Only SQL),意“不仅仅是SQL”: 泛指非关系 ...

  8. 【Redis3.0.x】NoSql 入门

    Redis3.0.x NoSql 入门 概述 NoSQL(Not Only SQL ),即不仅仅是 SQL,泛指非关系型的数据库.NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑 ...

  9. .NET分布式缓存Redis从入门到实战

    一.课程介绍 今天阿笨给大家带来一堂NOSQL的课程,本期的主角是Redis.希望大家学完本次分享课程后对redis有一个基本的了解和认识,并且熟悉和掌握 Redis在.NET中的使用. 本次分享课程 ...

  10. NoSQL入门)(详细)

    NoSQL入门 (原创:黑小子-余) 1.NoSQL是什么 NoSql(NoSQL=Not Only SQL),意即“不仅仅是SQL”,泛指菲关系型数据库.传统的关系数据库在应付web2.0网站,特别 ...

随机推荐

  1. Python 基础09 面向对象的进一步拓展

    调用类的其他信息 上一讲中提到,在定义方法时,必须有self这一个参数,这个参数表示某个对象,对象有有类的所有性质, 那么我么可以通过self 调用类属性. class Human(object): ...

  2. day7_python之面向对象高级-反射

    反射:通过字符串去找到真实的属性,然后去进行操作 python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 1.两种方法访问对象的属性 cl ...

  3. 2-3-4 tree留坑

    #include<bits/stdc++.h> #define LL long long #define pii pair<int,int> #define mp make_p ...

  4. iphone开发中调用系统打电话功能

    iphone开发中调用打电话功能,一般有2种: 1.系统的打电话代码,不返回当前程序: Java代码 [[UIApplication sharedApplication] openURL:[NSURL ...

  5. Bootstrap之Form表单验证神器: BootstrapValidator(转)

    前言:做Web开发的我们,表单验证是再常见不过的需求了.友好的错误提示能增加用户体验.博主搜索bootstrap表单验证,搜到的结果大部分都是文中的主题:bootstrapvalidator.今天就来 ...

  6. C# 比较两张图片是否完全相同

    本文演示如何比较两张图片是否完全相同. (注意:如果是比较两张图片是否相似,则比较复杂,涉及到机器学习) 方法一:把图片保存到内存流中,然后转化成 Base64 字符串进行比较 using Syste ...

  7. BZOJ 4034"树上操作"(DFS序+线段树)

    传送门 •题意 有一棵点数为 N 的树,以点 1 为根,且树点有边权. 然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的 ...

  8. scrapdy部署爬虫项目

    原文:https://blog.csdn.net/JLaiRen/article/details/82902321 scrapyd安装 打开命令行工具输入命令:pip install scrapyd ...

  9. 2019-9-2-win10-uwp-列表模板选择器

    title author date CreateTime categories win10 uwp 列表模板选择器 lindexi 2019-09-02 12:57:38 +0800 2018-2-1 ...

  10. 安装 Sureface Hub 系统 Windows 10 team PPIPro 系统

    本文告诉大家如何安装这个系统 本文的方法我自己没试过,如果失败了,不要打我 下载地址 中文版 https://pan.baidu.com/s/1gAJSSE6KB9JHXo4BT_VfmA 其他请看 ...