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. @codeforces - 708D@ Incorrect Flow

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个有源点与汇点的图 G,并对于每一条边 (u, v) 给定 ...

  2. 第二次 C++作业

    1.为什么要用函数? 函数是相对独立的,经常使用的功能抽象化表现形式,函数的优势在于,编写之后可以被重复使用,使用时可以只关心函数的功能和使用方法而不必关心函数的具体实现,这样可以有利于代码重用,可以 ...

  3. 怎么查看mysql 的binlog日志存放的位置

    image.png 这个你可以看配置文件 启用了才有这样的记录默认是没有的 linux系统中的/etc/my.cnf my.cnf内容: log-bin = mysqlbin # 默认配置 一般放在/ ...

  4. uva 11275 3D Triangles (3D-Geometry)

    uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem= ...

  5. git 提交添加 emoij 文字

    可能看到 git 提交是文本,就认为他无法使用表情图片,实际上 git 提交是可以添加表情 本文告诉大家如何做出下面图片提交 在 git 提交的时候,可以添加表情,只需要在字符串加上表示表情的文本 如 ...

  6. C# 16 进制字符串转 int

    最近在写硬件,发现有一些测试是做 16 进制的字符串,需要把他转换为整形才可以处理. 本文告诉大家如何从 16 进制转整形 如果输入的是 0xaa 这时转换 int 不能使用 Parse 不然会出现异 ...

  7. 走过的laravel-admin 的坑

    一.http://laravel-admin.org/docs/#/zh/  大家可以根据这个安装1.5 版本的laravel后台管理, 他很方便哦,有很多方法他都自己自己封装了. 二.大家如果想好好 ...

  8. Ubuntu 19.04安装phpipam软件

    1ftp下载xampp2安装xampp chmod 777sudo ./xampp.run3,ftp phpipam.tar.gz 解压 ./opt/lampp/www/phpipam/cp conf ...

  9. cccc初赛 L3-003 长城

    L3-009. 长城 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 邓俊辉 正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长 ...

  10. H3C 子网划分方法