导读:本篇博客,主要是结合自己在项目中的使用,简单的阐述一下NoSQL和SQL的区别。那么,根据自己的应用,NoSQL这边,选择的是MongoDB(Redis虽然也是,但属于内存存储,这里不予说明)。SQL这边,选择的是MySQL。

一、简单概述

SQL:对于SQL来说,也是我们最常说的关系型数据库,比如:MySQL,SQLServer等。那么,它的一个最明显的表示是,它的数据,全部是通过表单进行存储,有行和列之分。

NoSQL:相对于SQL而言,NoSQL则是一种非关系型的数据库。NoSQL(not only SQL),它的数据存储是以文档或者集合的形式进行,没有行列之分。

1.1,从数据存储来看:

NOSQL插入 sql nosql_SQL

1.2,从功能来看:

NOSQL插入 sql nosql_NOSQL插入_02

1.3,从查询语言来看:

NOSQL插入 sql nosql_MySQL_03

个人感觉,关系型和非关系,在本质上并没有什么区别。而在应用层面上,查询语言几乎是相同的,区别比较少,学习的成本也是相对较低。


二、实例说明

需求:希望获取一个用户的完整银行账户信息

2.1,使用关系型

我们通常的做法,是建立一个用户表,是存储用户的基本信息;再建立一个银行账户表,存储银行账户信息。然后通过外键,使这两者之间产生联系。

表一:用户表

NOSQL插入 sql nosql_MySQL_04

表二:用户记录

NOSQL插入 sql nosql_数据库_05

那么当我们想要获取用户的完整信息时,我们通常通过外键,去获得两张表信息的联合;

NOSQL插入 sql nosql_MySQL_06

我们通过使用关系型数据库,无法一次性获得所有的数据,通常通过联合。那么,如果数据表过多,会发生什么?PS:维护过数据库的应该有所体会。


可是,如果通过非关系型的数据块进行存储呢?比如MongoDB

2.2,使用非关系型

NOSQL插入 sql nosql_SQL_07

MongoDB允许你查找文档中的任何东西,这也就意味着,不用联合,就可以一次性的获取所有的数据。


三、思考总结

在之前的项目中,使用了MongoDB去存储考生的头像或者说是音频文件。那么事实上,大多数数据库都支持image的存储,对于音频文件,也都是使用大型的二进制存储结构进行存储,或者转换成文件流的形式写入数据库。

如果说使用MongoDB仅是为了存储头像或者说音频,那么我认为这是一件有待商榷的事儿。一个考生在当场考试配置下,只会对应一份考试信息,那么作为头像来说,是完全可以通过关系型,也就是我们一直使用的MySQL去实现的。


PS:一直很费解,为什么仅仅用MongoDB去存了图片?它的出现和要解决的问题,并不是对于流性文件或者图片的存储!


后续,将介绍MongoDB的简单安装和使用,以及使用MongoDB的问题和解决方案。