为您的下一个设计选择数据库的指南

2025-06-07

为您的下一个设计选择数据库的指南

为什么我们需要选择数据库?

数据库是有序的数据集合,易于管理和访问。每个提供商都根据数据库类型和数据库引擎的配置方式,对数据存储进行了不同的修改。因此,我们无法将某些数据结构存储在一种类型的数据库中,而存储在另一种类型的数据库中。

例如,关系数据库无法容纳图形数据结构。这类数据结构旨在存储在不同类型的数据库中。因此,在设计阶段选择适合您需求的数据库至关重要,而不是选择错误的数据库类型,然后在开发过程中进行更改。

数据库类型

我们可以在传统的关系型数据库和非关系型数据库之间进行选择。除了这两个词,你可能还听说过 SQL 和 NO SQL 数据库。非关系型数据库被称为 NO SQL,而关系型数据库被称为 SQL。

数据库类型

让我们来讨论一下在决定我们的设计数据库之前考虑的各种因素。

关系数据库

关系数据库已经存在了 40 多年,它是软件专业人员存储结构化数据的默认选择。您可能听说过 ACID 原则。为了在事务前后保持数据库的一致性,需要遵循某些属性。这些属性被称为 ACID 属性。关系数据库最强大的功能之一就是它对 ACID 事务及其相关编程语义的抽象。

关系数据库的一些重要特性包括

  1. ACID 合规性的
    一般原则是,如果一个更改失败,则整个事务将失败,并且数据库将保持在尝试事务之前的状态。

  2. 减少冗余 - 规范化:
    与特定实体相关的信息存储在一个表中,而相关数据存储在另一个表中,并通过外键链接到该表。例如,产品相关信息存储在一个表中,而购买该产品的客户信息存储在另一个表中,并通过外键链接到生产表。这个过程称为规范化,它还具有消除异常的额外好处。

  3. 并发性
    数据库并发性是一种独特的特性,允许两个或多个用户同时从数据库检索信息,而不会影响数据完整性。并发数据库事务期间的常见问题包括脏读和数据更新丢失(脏读 - 当特定事务访问数据库中另一个未提交的事务写入或更新的数据对象时,就会出现此问题。)。关系数据库中的并发性是通过事务访问数据来处理的。
    如果您的数据库正在将此事务作为一个整体原子单元运行,并且系统因断电而发生故障,则可以撤消该事务,将数据库恢复到其原始状态。

  4. 备份和灾难恢复
    关系数据库可确保数据状态始终保持一致。导出和导入操作使备份和恢复更加便捷。大多数基于云的关系数据库会执行连续镜像,以避免数据丢失,并使恢复过程更加轻松快捷。

因此,如果我们的用例需要上述功能,那么我们应该考虑使用关系数据库。

那么关系数据库有什么缺点吗?
当然有,我们来讨论一下关系数据库的一些缺点。

  1. 缺乏可扩展性。
    在多台服务器上使用关系数据库时,其结构会发生变化,变得难以处理,尤其是在数据量巨大的情况下。因此,数据无法在不同的物理存储服务器上扩展。最终,其性能会受到影响。

  2. 结构复杂:
    关系型数据库只能以表格形式存储数据,这使得表示对象之间的复杂关系变得困难。这是一个问题,因为许多应用程序需要多个表来存储其应用程序逻辑所需的所有必要数据。

非关系数据库

这些数据库适用于需要大量半结构化和非结构化数据、低延迟和灵活数据模型的应用程序。这可以通过放宽其他数据库的一些数据一致性限制来实现。
以下是 NOSQL 数据库的一些特点

  1. 简洁的设计
    与 SQL 数据库不同,NoSQL 数据库并不复杂。它们以非结构化或半结构化的形式存储数据,无需关系或表格结构。例如,将所有客户相关信息存储在一个文档中,而不是需要进行连接操作的多个表中。因此,代码、调试和维护工作量更少。

  2. 水平扩展
    如上所述,扩展是关系数据库的缺点之一。但扩展是非关系数据库的显著特性之一。由于我们可以将所有客户相关信息放在一个文档中,而不是像关系数据库那样在多个节点上存储多个表,因此 NoSQL 数据库的扩展相当容易。

  3. 可用性
    大多数非关系数据库支持复制以支持可用性。

  4. 独立于模式
    非关系型数据库在配置数据库或写入数据时不需要模式。例如,MongoDB 将数据存储在文档(JSON、XML)中,允许不同的文档包含不同的字段。因此,不同文档中的字段数量可以不同。

以下是非关系数据库的一些缺点。

  1. 不隐式支持 ACID 事务。
    它们不支持跨多文档的 ACID(原子性、一致性、隔离性和持久性)事务。但目前一些较新版本的 No-SQL 数据库在一定程度上支持 ACID 属性。(MongoDB 在 4.0 版本中增加了对多文档 ACID 事务的支持,并在 4.2 版本中扩展了对跨分片集群的支持。)

  2. 相对较大的存储空间
    。就存储利用率而言,No SQL 数据库需要更多存储空间,因为它们更注重查询优化而不是存储。因此,No-SQL 数据库中存在大量重复数据。NoSQL
    数据库根据操作和特性的性质分为不同的类别,包括文档存储、列式数据库、键值存储和图形数据库。
    我们讨论了关系数据库和非关系数据库各自的优缺点。那么,我们该如何根据需求选择合适的数据库呢?

选择正确的数据库

各种因素都会影响应用程序中使用的数据库的选择。下表比较了关系数据库和非关系数据库,以帮助我们做出选择:

SQL 与 NoSQL

以上面的表格为指导,我们将经历一些场景

当我们拥有非结构化数据并且需要高性能时,我们应该使用哪种数据库?
这类数据是非结构化的,并且需要高性能。因此,No SQL 数据库是最佳选择。像 MongoDB 这样的 NoSQL 数据库将是理想的选择。

当我们拥有一个金融应用程序(例如股票交易应用程序)并且需要数据始终保持一致时,我们应该使用哪种数据库?
在股票交易应用程序中,数据将是结构化的,我们也需要高度的一致性。这些就是关系数据库的特点。

如果我们开发一个需要以表格格式存储数据的零售商店应用程序,应该使用哪种数据库?
表格数据意味着结构化数据。因此,关系数据库是正确的选择。

我们应该使用哪种数据库来开发像 Reddit/Facebook 这样的应用程序?
这些社交媒体应用程序生成的数据大多是非结构化的,需要非关系型数据库。

对于 Web 多人游戏来说?
在这种情况下,我们需要将数据像游戏中的对象一样存储在数据库中,以便稍后进行反序列化。因此,面向文档的 NoSQL 数据库是最佳选择。

文章来源:https://dev.to/isurumax26/guide-to-choose-a-database-for-your-next-design-5cam
PREV
GitHub 上有一些不错的 Vue UI 工具包。
NEXT
8 个有趣的 Linux 实用程序