麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
937
2023-05-11
结构化SQL数据库与非结构化NOSQL数据库大比拼
大家好,这一期我们来谈一下数据库,目前有两大类型的数据库,一种是结构化SQL数据库,一种非结构化NOSQL数据库。
比拼1:数据的组织形式。
SQL
SQL, 顾名思义是结构化查询语言。它的数据都是结构化的,这个需要在最初创建数据库的时候要做好设计,这个设计一旦定型以后,再修改的话就会比较麻烦。当然如果设计做得好的话,也就无需再修改了。所以结构化数据***的一个工作就是表的设计。这是在使用这种数据库的时候,开发工作中的重中之重。
结构化数据的另一个体现就是各种数据之间的关系,比如说1对1的关系,一对多的关系,多对多的关系。
另一个体现就是数据的定义严格,在一个表中只能存放一种表数据,也就是说,你的每一行的数据都要遵循这个表的的定义。这个表里的每行的数据都遵循这个表内定义好的数据类型,不能够存放一些所谓非定义的数据,否则出错。
NOSQL
而NOSQL数据库。它不需要结构化的数据设计。这样它的容错性就很强,也不存在太严格的设计,所以以后的扩展和修改都比较容易。
NOSQL数据库里面不存在关系这个概念,如果你想实现关系,比如说1对1,一对多,多对多,你需要用程序来实现,而不是用数据库本身来实现。
另外一个是一个表中可以存放不同的数据类型, 简单的说就是每一行的数据可以不遵循统一的定义。
比拼2:原子操作
我们要看一下原子操作。所谓原子操作,就是指一个操作要么成功,要么失败,没有半途而终的。假设说一个处理订单的操作中存在5个步骤,你处理一个订单,提交订单,开始计算数据,随后写入数据库五个表然后,才返回成功,如果有一个失败,那就返回失败。返回失败就意味着撤回之前所有的操作。
这种原子操作在SQL数据库中非常容易实现,它本身就存在这样的机制叫做事务处理机制。
这也是我们选择SQL数据库的一个重要参考指标。只要我们在处理数据的过程中存在这样的操作,要么成功,要么失败,那么我们首先要选择的就是SQL数据库。
然而在NOSQL数据库中不存在这样的机制。但是这里追求数据的统一性,比如说你有很多个数据集,这里不称之为数据表了。一旦有一部分修改,你必须更新所有的包含这类数据数据集。
比拼3:效率方面。
结构化数据库有很多方式可以提高数据的处理效率。比如说创建索引,使用存储程序Stored Procedure, 一些架构如entity framework, hibernate。
但是因为结构化数据库天然的追求数据的完整性,所以它在效率方面还是存在一些瓶颈的。
然而NOSQL非结构化数据库就不存在这样的问题。因为它关心的就是快速的写入数据,查询数据。虽然有一些数据的冗余,但是它的写入和查询速度都非常快,尤其是在处理巨量数据的时候,这个优势特别明显。
但是如果数据集之间的耦合性非常强的话,因为要做到数据的统一,你需要不停的写多个相关的数据集,这样也会大大降低效率。
比拼4:扩展潜力
横向扩展和纵向扩展的区别。
横向扩展是指用多台服务器服务一个数据库,这种扩展的好处就是没有极限。这个对于结构化数据库来说,几乎是不可能的。非结构化数据库就可以做到横向扩展。
纵向扩展是指通过提高硬件性能软件性能来提高整体服务器的性能。这种扩展的劣势就是总会达到极限。当然这种扩展对于结构化数据库和非结构化数据库都是适用的。
小结:那么哪个更好呢?
说实在的,一下子很难说,是结构化数据库更好还是非结构化数据库更好?因为这两种数据库的设计初衷是不一样的。
结构化数据库的目标是追求数据操作的完整性,但是对单机服务器的性能要求比较高。
非结构化数据库的设计,追求的是读写的效率和可扩展性,可以实现多机的协作。但是又不注重数据操作的完整性。同时会产生大量的冗余数据。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。