<返回更多

SQL vs NoSQL:为满足您的业务需求选择正确的数据库模型

2023-09-11  微信公众号  小技术君
加入收藏
通过本文,我们将了解数据库如何扩展和不扩展。我们将研究传统SQL数据库存在的一些问题以及NoSQL数据库的引入如何解决这些问题。

关于基本SQL的快速回顾

SQL(Structured Query Language)数据库,也称为关系数据库,是一种基于关系模型的数据库管理系统(DBMS)。它以结构化的方式组织和存储数据,使用带有行和列的表来表示实体及其关系。

SQL数据库使用一种称为SQL的结构化查询语言与数据库进行交互。SQL提供了一组命令和语法,用于定义、操作和检索数据库中的数据。使用SQL,您可以创建表,使用主键和外键定义表之间的关系,插入和更新数据,并查询数据库以检索特定信息。

一些流行的SQL数据库系统包括:

关于基本NoSQL的快速回顾

NoSQL数据库,也称为非关系数据库,是一种与传统SQL(Structured Query Language)数据库不同的数据库管理系统类型。

流行的NoSQL数据库包括:

NoSQL数据库通常用于需要处理大量快速变化的数据的情况,例如社交媒体平台、物联网应用程序等。

通过本文,我们将了解数据库如何扩展和不扩展。我们将研究传统SQL数据库存在的一些问题以及NoSQL数据库的引入如何解决这些问题。我们将涵盖适合通过SQL数据库解决的情况以及更适合NoSQL数据库的情况。

关于关系数据库的问题

关系数据库适用于各种用例,并且通常是许多开发人员在开发应用程序时的默认选择。此外,关系数据库具有SQL,这使得可以在单个数据库中处理新的访问模式以及OLTP和OLAP模式成为可能。

OLTP vs OLAP[1] ← 这是一篇很好的文章,清晰地解释了OLAP和OLTP的含义及其区别,并提供了两者之间的简洁比较。如果您想进一步了解,请查看。

然而,为了提供这些功能,关系数据库通常遇到以下问题:

查询性能的不可预测性

在测试和应用程序生命周期的早期开发和发布阶段,您的应用程序通常具有快速响应的查询。

**带有5GB数据的RDBMS数据存储的表示**

然而,随着表的大小增长,这些操作会变得越来越慢。性能还受到同时运行的其他查询的影响。同时,如果公司的数据分析师在生产中对相同表进行分析操作,那么情况会变得更加复杂。

带有500GB数据的RDBMS数据存储的表示

这导致了第二个问题。

与所有著名的连接存在问题

SQL中的连接可以由于多种原因而损害速度:

为了解决这些问题,您可能希望扩展数据库,这将导致下一个问题。

DB实例的水平扩展难题

扩展数据库有两种方法:

但是,您最终会达到垂直扩展的极限。在这一点上,您可能希望考虑水平扩展。但是,这会引入一套自己的挑战。

水平扩展在您可以分区单个请求可以由单个机器/节点处理的方式时效果最佳。

通过NoSQL数据库解决方案

NoSQL数据库尝试解决关系数据库提出的这些主要问题。

解决连接

让我们迅速了解NoSQL在这里试图解决什么。

SQL依赖于规范化来进行数据建模。

规范化是数据库设计中的一个过程,通过它来组织和结构化数据,以最小化冗余,提高数据完整

性,并优化数据库效率。它涉及将数据分解为较小、更可管理的实体(表),并在它们之间建立关系。

它旨在通过只在一个地方存储每个数据片段来消除冗余。这以以下方式使我们受益:

然而,所有这些都需要付出代价。CPU和内存的代价通常很高。

NoSQL采用了解决所有这些问题的方法。

 SQL数据库中的数据存储示例

将此数据模型转换为NoSQL数据库,例如DynamoDB,然后它看起来像下面这样。

NoSQL数据库(DynamoDB)的对应数据存储示例

解决水平扩展

关系数据库之所以很难水平扩展的主要原因是查询语法的灵活性。由于数据访问模式的灵活性,系统不知道哪些数据将在查询实际执行之前被获取。因此,为了避免在执行查询时进行跨机器网络调用,所有数据都必须保持在本地,即在同一节点上。

NoSQL数据库通过要求将数据拆分为较小的段并在这些段之一中执行所有查询来采用水平扩展。

为了更好地了解这一点,让我们以user_id作为分区键,并在图中进行跟踪。

 大多数NoSQL数据库在将分区键值分配给节点之前对其进行哈希处理。这有助于更好地分发数据。

在读取和写入操作期间,所有查询必须包括分区键,以便直接访问相关节点。

解决查询性能的不可预测性

在SQL数据库中,随着表的大小增长,操作会变得越来越慢。性能还受到同时运行的其他查询的影响。

对于NoSQL数据库的读取操作,所有查询必须包括分区键。在执行写入操作时,可以将此操作发送到负责该数据块的节点,而不会打扰群集中的其他节点。随着数据量的增加,可以根据需要继续添加额外的节点。每个操作仅影响群集中的一个节点。与SQL数据库中的测试和生产环境相比,查询性能几乎不会有太大差异,因为每个操作仅影响一个节点。

关键词:SQL      点击(8)
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多SQL相关>>>