NoSQL现在非常火,我看过的简历里面十个有九个都写了熟悉NoSQL,但是对于NoSQL背后的细节却很少有人能讲清楚,甚至连NoSQL里面的这个No是什么意思都很多人搞错。
图片来自Pexels
这个No并不是Not的意思,而是NotOnly的缩写。不得不说这个缩写实在是很坑爹,单从字面上应该没人能猜出来它是这个意思。
而且即使解读成NotOnlySQL,还是有点云里雾里,不是很能精准地get到它的点。
因为SQL的英文全写是StructuredQueryLanguage,也就是结构化查询语言的意思。它可以认为是一门特殊的编程语言,但“不仅仅是SQL”是啥意思?
的确令人费解,所以我们从字面意思上去理解是不行的,我们需要从实际应用场景去理解。
SQL的应用场景是关系型数据库,比如我们常用的Oracle、MySQL,这些就是关系型数据库。
我们理解数据库的时候,往往会从表的结构入手去理解。数据库当中存储的是一张张的表,表呢是一行行数据组成的,而每一行数据都有固定的字段。
我想这点大家应该非常熟悉,即使没有学过数据库或者是像我这样已经还给老师的,应该或多或少都有印象。
但是为什么它会被叫做关系型数据库,而不是表结构数据库呢?
因为在数据库当中,关系要比表结构更重要。表结构只是一种形式,而数据库当中核心的设计理念其实是关系。
这也是为什么我们学习数据库的时候都需要从ER图开始,而不是上来就讲数据库使用的方法,或者是SQL语言的细节。
如果你想不明白这句话的含义,也没有关系,我们先放一放,最后再回到这个话题来。
问题来了,我们知道了常用的SQL数据库是关系型数据库,那么NoSQL代表的数据库又是什么呢?
关于NoSQL概念我至少看到了两种说法:
非关系型数据库
文档型数据库
我个人在理解的时候觉得这两种说法都不是非常完美,但相比之下显然是第二种更好,因为第一种说法完全没有给我们提供任何信息。
文档型数据库这里的文档,并不是我们常规理解的一篇文档的含义,而是指的数据存储的结构和核心逻辑。
一个生动的例子
和大多数技术上的概念一样,NoSQL也比较晦涩,很难单纯用语言将它描述清楚。
所以我决定举一个生动活泼,大家都耳熟能详的例子——就是万能的X宝。
下面是一张X宝当中的商品详情页的图(随便选取,并非广告,如有巧合,请付推广费):这张图大家应该都很熟悉了,在我们平时的网上购物的活动当中,一定见过了许多次。
它看起来有些眼花缭乱,我们把上面的内容做个抽象和精简,画成一张草图,它大概是这样的(的确有些草率):也就是说我们把一个商品详情页展示的内容大概分成了三个部分:
商品图
商品的一些介绍说明
用户的评论
各大电商公司商品详情页的设计大同小异,也许有些细节不太一样,但是整体上的模块都相差不大。
为了简化问题,我们就假设商品详情页需要关联图片信息、文字说明和用户评论这三张表。
其实这样划分不太科学,比如文字介绍和商品图可以都存在商品详情页的表中。
比如除了这些信息之外,还有商品的售卖信息,比如库存、价格、当前的优惠、活动等等,但是这些和我们最后的结论关系不大,可以简单这么理解。
根据上面的划分方式,我们应该根据itemID去查询商品的图片、文字以及评论信息,这从表面上看当然没有问题。
但实际上这是有问题的,问题在于这些数据都不是一对一的关系,而是一对多的关系。
比如头部展示的图片往往不止一张,文字说明可能也不止一段,同样用户的评论可能也不止一条。这个问题怎么解决呢?
你可能会想出办法来,这不难啊,我们在img和text以及