2023年如何选择合适的数据库

导航到

本文最初发表在The New Stack上,并在此处经授权转载。

数据库通常是应用程序中最大的性能瓶颈。一旦在生产中使用,迁移也相对困难,因此为您的应用程序选择合适的数据库至关重要。

做出正确决策的关键部分是了解您的选择。在过去几年中,数据库领域发生了快速变化,因此本文将通过以下主题为您简化这些内容:

  • 2023年数据库生态系统的概述
  • 从技术角度看,是什么使得不同类型的数据库表现不同
  • 何时使用专用数据库与通用数据库

2023年的数据库领域

在深入探讨之前,让我们看一下当前数据库生态系统和各种类型数据库的市场份额快照。

database-ranking

如您所见,尽管围绕NoSQL数据库有很多炒作,但关系数据库仍然是最常用的数据库类型。然而,如果我们看一下最近的趋势,排名略有不同。

databse-ranking-last-24-months

此图表显示,在过去两年中,关系数据库在几种不同类型的数据库模型面前失去了一些地盘。以下是一些开发者正在采用的主要数据库模型:

是什么使得数据库表现不同?

当谈到数据库性能时,并没有什么神奇的因素使得一种数据库比另一种表现更好。像所有计算机科学的东西一样,它归结于为了优化特定用例而进行的权衡。对于数据库而言,CAP定理是了解可能做出的权衡的一个很好的介绍。

例如,在NoSQL数据库的早期,它们的可伸缩性引起了很大的炒作,但通常涉及牺牲标准关系数据库提供的数据一致性保证。

其他一些设计因素会影响数据库的性能

  • 磁盘存储格式——数据库实际上如何在硬盘上存储和组织数据对性能有重大影响。随着越来越多的公司开始存储大量用于分析工作负载的数据,以列格式Parquet存储数据越来越受欢迎。
  • 主索引数据结构——数据库如何索引数据也将对性能产生重大影响。数据库通常有一个由其存储引擎使用的主索引,然后允许用户定义次要索引。考虑索引的最简单方法是它们将有助于提高读取性能,但会增加写入新数据点的开销。
  • 数据压缩——数据如何压缩将影响存储数据的成本和数据库的查询性能。一些压缩算法旨在尽可能减少数据的大小。其他可能具有较低的压缩比率,但在解压缩数据时速度更快,这意味着您可以得到更好的数据查询性能。
  • 热存储和冷存储 —— 许多数据库系统现在允许数据在更快但更贵的“热”存储和更便宜但更慢的“冷”存储之间移动。从理论上讲,这可以让频繁查询的数据性能更好,同时节省存储费用,并且仍然可以访问冷存储中的数据而不是直接删除。
  • 耐用性/灾难恢复 —— 数据库如何处理灾难恢复也会影响性能。设计数据库以减轻各种故障通常会导致性能下降,因此对于某些数据不是关键且偶尔丢失数据点是可以接受的用例,数据库可以取消一些安全保证以获得更好的性能。

所有这些因素,以及许多未涉及的因素,都会影响数据库的性能。通过操纵这些杠杆,数据库可以被优化以具有非常具体的性能特性,并且牺牲某些东西实际上不会成为问题,因为它们对于某种情况不是必需的。

何时使用专门数据库为您的应用程序

选择使用哪种数据库为您的应用程序需要考虑许多因素。让我们看看在为您的应用程序选择数据库时需要考虑的一些主要事项。

数据访问模式

选择数据库的主要因素是您的应用程序中的数据如何创建和使用。最广泛的方法可能是确定您的负载将是在线分析处理(OLAP)还是在线事务处理(OLTP)。OLAP负载是面向分析的,与关系数据库设计来处理的标准OLTP负载相比,具有不同的访问模式。OLAP查询通常只针对几个列进行计算,可以通过使用为此设计的列式数据库进行优化。例如,由于性能优势,大多数数据仓库都是建立在列式数据库之上的。

一旦您大致确定了负载类型,您现在需要考虑查询的延迟要求和数据写入的频率。如果您的用例需要接近实时的查询和低延迟,例如监控任务,您可能会考虑一个设计用于处理高写入吞吐量同时允许在数据摄入后不久进行查询的时间序列数据库。

对于OLTP风格的负载,您通常需要在关系数据库和文档数据库之间进行选择。这里的关键因素将是查看您的数据模型并确定您是否想要NoSQL文档数据库提供的模式灵活性,还是更倾向于关系数据库提供的一致性保证。

您还可以考虑的一个问题是,您是否预计您的工作负载在一天中将是相对一致的,还是“突发性”的,需要数据库偶尔处理远大于读取和写入的大量数据。在这种情况下,使用一个使您能够轻松扩展和缩减硬件的数据库是有意义的,这样您就不会面临停机或为大多数时间不需要的硬件支付高额费用。

内部知识

在决定数据库使用时,应考虑您团队现有的技能集。您需要确定使用专用数据库的潜在收益是否值得投资于培训团队学习如何使用它,以及学习新技术的生产力损失。

如果您知道您正在构建的服务不需要完全针对性能进行优化,那么使用您团队最熟悉的数据库来完成工作是可以的。另一方面,如果您知道性能至关重要,那么采用新数据库所带来的成长痛苦可能也是值得的。

架构复杂性

尽可能保持软件架构的简单性是理想的,因此向系统添加另一个组件,如新数据库,应该权衡管理数据库将为系统增加的额外复杂性。

如果您的应用程序非常适合专用数据库,可以作为应用程序数据的主要数据库,这并不是一个大问题。另一方面,如果您将使用更通用的数据库作为应用程序的主要存储,除非您面临严重的性能问题,否则为数据子集引入额外的数据库可能并不值得。

结论

数据库生态系统正在迅速发展。虽然选择您熟悉的数据库始终是一个好选择,但开发人员也应该关注一些新发布的技术,看看它们是否适合您正在构建的内容。在专用数据库上构建可以帮助您的应用程序在多个方面取得成功,通过节省成本、提高用户体验性能、简化扩展并提高开发人员生产力。