先搞清楚全称
SQL全称为Structured query language ,即结构化查询语言,可以把他理解为一门特殊的编程语言。
那么nosql是什么意思呢?这里的no并不仅是not,而是not only的意思,所以nosql全称应该是Not Only Structured query language,即不仅仅是sql
SQL
关系型数据库
SQL的应用场景是关系型数据库,比如我们常用的Oracle、MySQL,这些就是关系型数据库。我们理解数据库的时候,往往会从表的结构入手去理解。数据库当中存储的是一张张的表,表呢是一行行数据组成的,而每一行数据都有固定的字段。我想这点大家应该非常熟悉。
但是为甚么他会被叫做关系型数据库,而不是表结构数据库呢?
因为在关系型数据库当中,关系要比表结构重要。表结构只是一种形式,而数据库中核心的设计理念是什么呢?是关系,表与表之间的关系。这也是为什么我们学习数据库、设计数据库时都要从ER图开始,而不是一上来就讲数据库使用的方法,或是SQL语言的细节。
大家可以想一想,我们建立好数据库后,这时候需要写sql语句,大家可能多多少少能感觉到,数据库的表设计的好不好,与SQL语句的书写难度、SQL语句查询性能有着莫大的关系,而设计数据库的过程,其实就是在设计这个库中表与表之间的关系。
问题来了,我们知道了常用的SQL数据库是关系型数据库,那么noSQL代表的数据库又是什么呢?
NoSQL
为什么使用Nosql?
随着互联网的飞速发展与普及,网民上网冲浪时所产生数据也逐日增多,从 GB 到TB 到 PB。这些数据有很大一部分都是由关系型数据库管理系统 (RDBMS)来进行处理的。
由于关系型数据库的范式约束、事务特性、磁盘等特点,若服务器使用关系型数据库,当有大量数据产生时,传统的关系型数据库已经无法满足快速查询与插入数据的需求。NoSQL 的出现解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,获取性能上的提升。但是,在某些特定场景下 NSQL 仍然不是最佳人选,比如一些绝对要有事务与安全指标的场景。
NoSQL是什么?
关于noSQL概念,一种说法是非关系型数据库,另一种说法是文档型数据库。我个人在理解的时候觉得这两种说法都不是非常完美,但相比之下显然是第二种更好,因为第一种说法完全没有给我们提供任何信息。文档型数据库这里的文档,并不是我们常规理解的一篇文档的含义,而是指的数据存储的结构和核心逻辑。
和关系型数据库不同,文档型数据库的核心是文档。当然这里的文档指的不是我们通常意义上的文档,而是json或者是xml格式的数据。在目前的noSQL数据库当中,json类型的数据更加常用一些。
每个文档包含成对的字段和值。这些值通常可以是各种类型,包括字符串、数字、布尔值、数组或对象等,并且它们的结构通常与开发者在代码中使用的对象保持一致。由于字段值类型和强大的查询语言的多样性,因此文档数据库非常适合各种各样的使用案例,并且可以用作通用数据库。它们可以横向扩展以适应大量数据。据 [DB-engines] (DB-Engines Ranking - popularity ranking of database management systems) 指出,MongoDB 一直被评为世界上较受欢迎的 NoSQL 数据库,它就是一种文档数据库。
键值对存储是一种较简单的数据库,其中每个项目都包含键和值。通常只能通过引用键来检索值,因此学习如何查询特定键值对通常很简单。键值数据库非常适合需要存储大量数据但无需执行复杂查询来检索数据的使用案例。常见的使用案例包括存储用户首选项或缓存。Redis 和 DynanoDB 是流行的键值数据库。