52

结构化SQL数据库与非结构化NOSQL数据库大比拼

 5 years ago
source link: https://www.tuicool.com/articles/FnUVRrA
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

fIfYv2y.jpg!web

大家好,这一期我们来谈一下数据库,目前有两大类型的数据库,一种是结构化SQL数据库,一种非结构化NOSQL数据库。

比拼1:数据的组织形式。

fm6zeeB.jpg!web

SQL

SQL, 顾名思义是结构化查询语言。它的数据都是结构化的,这个需要在最初创建数据库的时候要做好设计,这个设计一旦定型以后,再修改的话就会比较麻烦。当然如果设计做得好的话,也就无需再修改了。所以结构化数据最大的一个工作就是表的设计。这是在使用这种数据库的时候,开发工作中的重中之重。

结构化数据的另一个体现就是各种数据之间的关系,比如说1对1的关系,一对多的关系,多对多的关系。

另一个体现就是数据的定义严格,在一个表中只能存放一种表数据,也就是说,你的每一行的数据都要遵循这个表的的定义。这个表里的每行的数据都遵循这个表内定义好的数据类型,不能够存放一些所谓非定义的数据,否则出错。

NOSQL

而NOSQL数据库。它不需要结构化的数据设计。这样它的容错性就很强,也不存在太严格的设计,所以以后的扩展和修改都比较容易。

NOSQL数据库里面不存在关系这个概念,如果你想实现关系,比如说1对1,一对多,多对多,你需要用程序来实现,而不是用数据库本身来实现。

另外一个是一个表中可以存放不同的数据类型, 简单的说就是每一行的数据可以不遵循统一的定义。

比拼2:原子操作

3U7F3yV.jpg!web

我们要看一下原子操作。所谓原子操作,就是指一个操作要么成功,要么失败,没有半途而终的。假设说一个处理订单的操作中存在5个步骤,你处理一个订单,提交订单,开始计算数据,随后写入数据库五个表然后,才返回成功,如果有一个失败,那就返回失败。返回失败就意味着撤回之前所有的操作。

这种原子操作在SQL数据库中非常容易实现,它本身就存在这样的机制叫做事务处理机制。

这也是我们选择SQL数据库的一个重要参考指标。只要我们在处理数据的过程中存在这样的操作,要么成功,要么失败,那么我们首先要选择的就是SQL数据库。

然而在NOSQL数据库中不存在这样的机制。但是这里追求数据的统一性,比如说你有很多个数据集,这里不称之为数据表了。一旦有一部分修改,你必须更新所有的包含这类数据数据集。

比拼3:效率方面。

VBjiY3Q.jpg!web

结构化数据库有很多方式可以提高数据的处理效率。比如说创建索引,使用存储程序Stored Procedure, 一些架构如entity framework, hibernate。

但是因为结构化数据库天然的追求数据的完整性,所以它在效率方面还是存在一些瓶颈的。

然而NOSQL非结构化数据库就不存在这样的问题。因为它关心的就是快速的写入数据,查询数据。虽然有一些数据的冗余,但是它的写入和查询速度都非常快,尤其是在处理巨量数据的时候,这个优势特别明显。

但是如果数据集之间的耦合性非常强的话,因为要做到数据的统一,你需要不停的写多个相关的数据集,这样也会大大降低效率。

比拼4:扩展潜力

YZnYVfe.jpg!web

横向扩展和纵向扩展的区别。

横向扩展是指用多台服务器服务一个数据库,这种扩展的好处就是没有极限。这个对于结构化数据库来说,几乎是不可能的。非结构化数据库就可以做到横向扩展。

纵向扩展是指通过提高硬件性能软件性能来提高整体服务器的性能。这种扩展的劣势就是总会达到极限。当然这种扩展对于结构化数据库和非结构化数据库都是适用的。

小结:那么哪个更好呢?

说实在的,一下子很难说,是结构化数据库更好还是非结构化数据库更好?因为这两种数据库的设计初衷是不一样的。

结构化数据库的目标是追求数据操作的完整性,但是对单机服务器的性能要求比较高。

非结构化数据库的设计,追求的是读写的效率和可扩展性,可以实现多机的协作。但是又不注重数据操作的完整性。同时会产生大量的冗余数据。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK