结构化SQL数据库和非结构化NOSQL数据库之间的一场大较量。竞赛一:数据的组织形式。SQLSQL,顾名思义,是一种结构化查询语言。它的数据是结构化的,需要在刚创建数据库的时候就设计好。一旦设计定型,再修改就比较麻烦了。当然,如果设计的好,就没有必要再修改了。所以结构化数据最重要的任务之一就是表设计。这是在使用这种数据库的开发工作中最重要的事情。结构化数据的另一种表现形式是各种数据之间的关系,如一对一关系、一对多关系、多对多关系。还有一个表现就是对数据的定义很严格,一个表中只能存放一种表数据,也就是说你的每一行的数据都必须遵循这个表的定义。该表中每一行的数据都遵循该表定义的数据类型,不能存储一些所谓未定义的数据,否则会出错。NOSQL和NOSQL数据库。它不需要结构化数据设计。这样,它的容错性就很强,而且没有太严格的设计,以后的扩展和修改都比较容易。关系的概念在NOSQL数据库中不存在。如果要实现一对一、一对多、多对多等关系,需要用程序来实现,而不是数据库本身。另一个是不同的数据类型可以存储在一个表中。简单地说,每一行的数据可能没有遵循统一的定义。比赛二:原子操作让我们来看看原子操作。所谓原子操作,就是一个操作要么成功,要么失败,没有中途。假设订单处理操作有5个步骤。你处理一个订单,提交订单,开始计算数据,然后把五张表写入数据库,才返回成功。如果失败,则返回失败。返回失败意味着撤销所有以前的操作。这种原子操作在SQL数据库中是非常容易实现的,SQL数据库本身就有这样一种机制,叫做事务处理机制。这也是我们选择SQL数据库的重要参考指标。只要我们在处理数据的过程中有这样的操作,要么成功要么失败,那么我们首先应该选择的就是SQL数据库。然而,NOSQL数据库中不存在这样的机制。但是这里追求的是数据的统一性。比如你有很多数据集,这里不叫数据表。修改零件后,您必须更新包含此类数据的所有数据集。竞争三:效率方面。结构化数据库可以通过多种方式提高数据处理效率。比如创建索引,使用StoredProcedure,实体框架,hibernate等一些架构。但是,由于结构化数据库天生追求数据的完整性,在效率上还存在一些瓶颈。而NOSQL非结构化数据库则不存在这样的问题。因为它关心的是快速写入数据和查询数据。虽然存在一定的数据冗余,但其写入和查询速度都非常快,尤其是在处理海量数据时,这种优势尤为明显。但是如果数据集之间的耦合性很强,因为要实现数据统一,需要不停地写多个相关的数据集,这样会大大降低效率。竞争四:扩张潜力水平扩张和垂直扩张的区别。水平扩展是指使用多台服务器为一个数据库服务。这种扩展的好处是没有限制。这对于结构化数据库来说几乎是不可能的。非结构化数据库可以水平扩展。纵向扩展是指通过提升硬件性能和软件性能来提升服务器整体性能。这种缩放的缺点是总是会达到极限。当然,这个扩展对结构化和非结构化数据库都适用。总结:那么哪个更好呢?老实说,一下子很难说结构化数据库好还是非结构化数据库好?因为这两个数据库的设计意图不同。结构化数据库的目标是追求数据操作的完整性,但对单机服务器的性能要求比较高。非结构化数据库的设计追求读写的效率和可扩展性,能够实现多机协作。但它并不注重数据操作的完整性。同时,会产生大量的冗余数据。
