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. 一文告诉你Adam、AdamW、Amsgrad区别和联系 重点

    **序言:**Adam自2014年出现之后,一直是受人追捧的参数训练神器,但最近越来越多的文章指出:Adam存在很多问题,效果甚至没有简单的SGD + Momentum好.因此,出现了很多改进的版本, ...

  2. uni-app学习记录05-二级联动及获取DOM对象

    <template> <view> <view class="id"> <view class="left"> ...

  3. Python--day24--单继承关键字super

    super().  调用父类方法:(super不仅可以在一个类的内部使用,还可以在一个类的外部使用)

  4. H3C OSPF协议区域LSA发布

  5. Xshell + SVN使用

    切换目录 cd+想跳转到的目录下 文件浏览 ls ll (ll 信息全) svn更新 svn up 编辑 vi vi的命令 文件保存与退出: :q 在文件未作任何修改的情况下退出. :q! 强制退出, ...

  6. Vue.js 学习笔记 第7章 组件详解

    本篇目录: 7.1 组件与复用 7.2 使用props传递数据 7.3 组件通讯 7.4 使用slot分发内容 7.5 组件高级用法 7.6 其他 7.7 实战:两个常用组件的开发 组件(Compon ...

  7. 2019-8-31-C#-控制台使用-UAC-权限

    title author date CreateTime categories C# 控制台使用 UAC 权限 lindexi 2019-08-31 16:55:58 +0800 2018-07-05 ...

  8. 51nod 1832 前序后序遍历

    思路:设只有一颗子树的节点有ans个设前序边历数组为pre[100],后序遍历数组为pos[100]:前序遍历的第二个元素是A的一个子节点左右节点不知,设ax-ay表示一个树的前序遍历,bx-by表示 ...

  9. linux内存池

    在内核中有不少地方内存分配不允许失败. 作为一个在这些情况下确保分配的方式, 内核 开发者创建了一个已知为内存池(或者是 "mempool" )的抽象. 一个内存池真实地只是一 类 ...

  10. Linux 内核热插拔事件产生

    一个热插拔事件是一个从内核到用户空间的通知, 在系统配置中有事情已经改变. 无论何 时一个 kobject 被创建或销毁就产生它们. 这样事件被产生, 例如, 当一个数字摄像头 使用一个 USB 线缆 ...