暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何在众多云数据库中选择最合适的?

云原生数据库 2023-04-15
130

如何选择云数据库

事务性云数据库有各种形式和大小,从简单的键值存储到全球规模的分布式关系数据库。下面介绍如何为您的应用程序选择合适的云数据库。

自 1980 年代初以来,数据库已经走了很长一段路,当时它们只在大型机上运行,您可以在 CODASYL 数据库和关系数据库之间进行选择。CODASYL数据库的速度往往是关系数据库的两倍,但最终计算机硬件的改进和SQL查询的便利性(与编写导航数据库代码相比)导致关系数据库主导市场。

现在,可以从智能手机到数据中心的服务器,再到地理位置分散的云数据库,可以在任何地方运行数据库。除了关系表格数据库之外,还有用于时间序列、图形、空间、文本、联机分析处理 (OLAP)、XML 和 JSON 数据的数据库。一些数据库专门处理单一类型的数据;有些提供数据类型选择,但一次只能选择一种;有些允许多种数据类型在同一数据库实例中共存。一些数据库专门用于联机事务处理 (OLTP),一些数据库专门用于分析 (OLAP),而一些数据库则适用于组合事务和分析工作负载。

在本文中,我们将重点介绍在云中运行的事务工作负载,并将云数据仓库留给另一篇文章。我们将讨论的一些数据库也可以在本地运行;有些具有专门的云支持,但与本地数据库兼容;有些是“云原生的”,这意味着它们只能从云提供商处获得。

确定数据库要求

数据库几乎从来都不是一件事情。相反,数据库通常是应用程序的后端或存储层。
简而言之,CAP定理
CAP定理(Brewer等人,1998)指出,任何网络共享数据系统最多可以具有三个理想属性中的两个:
一致性 (C) 相当于拥有数据的单个最新副本;
该数据的可用性(A)(用于更新);
和对网络分区的容差 (P)。
数据库的理想属性取决于它所服务的应用程序的需求。如果应用程序显示目录,则数据库的读取速度和延迟很重要;文档数据库可能是理想的,但关系数据库和宽列数据库也可以使用。如果应用程序处理金融事务,则数据库的 ACID 属性(原子性、一致性、隔离性和持久性)非常重要,关系数据库可能是理想的选择。
正如2012年的一篇后续论文所解释的那样,三分之二的表述被证明过于简单化。在现代分布式数据库架构中,节点故障和网络分区通过使用Paxos或Raft算法的共识组来缓解。实质上,当一个节点退出群集时,只要群集具有仲裁,它就会继续工作。此外,在专用网络中很少有分区,例如在主要云提供商处发现的分区,这些分区在数据中心之间使用冗余光纤,并且不通过公共互联网传输内部流量。
这意味着,虽然没有数据库在技术上可以绕过CAP定理,但实际上最好的云数据库具有大于五个九(99.999%)的可用性。如此有效地,这些数据库可以绕过CAP定理,并且既一致又可用。
如果应用程序是全球多人视频游戏,那么读写延迟都很重要,数据库可能需要分布式,尽管不一定是关系性的,也不一定具有强一致性;键值数据库可能是理想的选择。如果应用程序记录和监控阀门的传感器输出,数据库应该能够快速写入大量时间序列数据。

您将生成多少数据?有多快?


几乎任何云数据库都可以处理少量数据(以 GB 或更小为单位),有些可以在内存中处理这些数据。许多云数据库可以处理TB(数千GB);只有少数可以容纳PB(数百万GB)。请注意,大多数云数据库按月向您收取存储费用,并且 SSD 存储的费用高于磁盘存储。
数据到达的速度可能会给其他指标带来压力,例如数据库写入速度和网络容量。如果大量数据以突发形式到达,数据库或前端程序可能需要在写入永久存储时将其缓冲在 RAM 中,以避免数据丢失。Redis 经常被提及能够缓冲其他数据库的大量数据突发。

您是否提前了解您的架构?


如果您的数据库架构(数据结构)是预先确定的,并且不太可能随时间发生重大变化,并且您希望大多数字段在记录之间具有一致的类型,那么 SQL 数据库将是您的理想选择。否则,NoSQL 数据库(其中一些甚至不支持模式)可能更适合您的应用程序。

但是,也有例外。例如,操作数据库 Rockset 允许 SQL 查询,而无需对其导入的数据强加固定模式或一致的类型。

哪种形状适合您的数据?

关系SQL数据库,如Microsoft SQL Server,PostgreSQL和MySQL,将强类型数据存储在带有行和列的矩形表中。它们依赖于表之间的已定义关系,使用索引来加快所选查询的速度,并使用 JOINS 一次查询多个表。许多现代关系数据库(包括 Oracle 数据库)也支持其他形状。
文档数据库,如MongoDB和Couchbase,通常存储弱类型的JSON(文本或二进制),其中可能包括数组和嵌套文档。图形数据库存储具有属性的顶点和边,例如 Neo4j,或 RDF 三元组,例如 AllegroGraph。无论实现方式如何,图形数据库都强调实体之间的联系。其他NoSQL数据库类别包括键值(如RocksDB)和列式存储(如Cassandra)。
有时,数据以也可用于分析的形状捕获;有时不是,转型是必要的。有时,一种数据库建立在另一种数据库之上。例如,键值存储几乎可以作为任何类型的数据库的基础。

您的延迟要求是什么?

延迟既指数据库的响应时间,也指应用程序的端到端响应时间。理想情况下,每个用户操作都有一个亚秒级的响应时间;这通常意味着需要数据库在 100 毫秒内对每个简单事务做出响应。分析查询通常需要几秒钟或几分钟。应用程序可以通过在后台运行复杂的查询来节省响应时间。
在云中运行数据库会使延迟的测量复杂化。这里有多种因素在起作用。最简单的注意事项是,由于数据库查询响应,客户端和数据库之间的延迟会增加延迟。更复杂的注意事项是,在分布式数据库中提交事务可能涉及在地理上分散的区域等待写入,尤其是在数据库保持强一致性的情况下。

是否需要群集数据库?

与单节点数据库相比,群集数据库具有多种优势,但费用和复杂性更高。除其他优点外,群集还可以表现出更高的可用性、更高的吞吐量,并且在某些情况下还可以显示更低的延迟。
对于每个节点都有整个数据库副本的群集类型,可以获得显著的冗余和更高的可用性。根据策略,读取可能只需要一个节点,否则群集中节点的仲裁可能必须就要返回的值达成一致。
使用具有多个节点的群集可为数据库提供更多 CPU,从而增加整个 CPU 并可能提高事务速率。使用允许最近的节点返回值的读取策略,读取延迟通常会下降。另一方面,必须等待所有节点提交的写入或事务策略有时会增加写入延迟。
使用共识组有助于减少延迟。如果你有一个三节点集群,并且一个节点被加载下来,其他两个节点可以批准共识交易,并在第三个节点可用时更新它。
分片是一种通过划分数据库来处理更多数据的方法。虽然手动分片可能是一个耗时的痛苦,但许多数据库都能够自动分片。

您需要分布式数据库吗?

群集不是扩展数据库的最终方法,但它是第一步。下一步是分布式数据库,这通常意味着在多个区域中存在集群。某些数据库允许分布式只读副本和主读写实例或集群。其他数据库允许分布式读写实例或集群,并具有同步机制。
分布式数据库通常可以为远程用户提供更低的延迟和更高的吞吐量。东京的用户可能会看到巴塞罗那服务器的延迟为 260 毫秒,但如果日本有数据库副本,他们的平均读取延迟可能只有 10 毫秒。这对写入和事务的影响取决于数据库的一致性要求以及远程群集的配置方式。
早期的分布式数据库是具有最终一致性的NoSQL数据库。最终一致性意味着在远程位置写入后读取不保证返回当前信息,但会随着时间的推移而更新。最终一致性放宽了完成写入和事务的要求,从而降低了延迟。
最近,一些分布式数据库在数据结构、共识组和时间同步的帮助下实现了强大的一致性。这方面的例子包括Google Cloud Spanner和CockroachDB。
您的数据库预算是多少?
虽然大多数数据库都有免费的“社区”或“开发/测试”版本,但除了在线社区论坛之外,这些数据库可能缺乏支持。社区和开源版本也可能缺乏商业版本中提供的一些性能优化。如果您的公司将依赖数据库,您应该投资许可证和支持。
如果您在云中运行数据库,则至少需要为云资源付费。对于商业数据库,您还需要数据库许可证,该许可证可以是供应商提供的长期许可证,也可以是通过云提供商购买的即用即付许可证。

主要云数据库产品

我上次查看时,DB-Engines排名中有373个系统,尽管其中许多产品并没有明确表示是云数据库。我为此列表选择了 12 家云服务和云数据库供应商作为示例,并按字母顺序列出它们。请注意,列入此列表不是建议,不列入也不是谴责。

亚马逊网络服务在其云中提供了至少15个数据库,尽管其中一些是数据仓库,其他一些已被弃用。Aurora 是其高性能、高可用性的关系数据库服务,同时支持 MySQL 和 PostgreSQL。RDS是其标准性能的关系数据库服务,支持五个引擎:MariaDB,MySQL,Oracle Database,PostgreSQL和Microsoft SQL Server。DynamoDB 是其高流量键值数据库服务。ElastiCache是其内存服务,具有Memcached和Redis兼容性。DocumentDB是一个与MongoDB兼容的文档数据库服务。Keyspaces 是一个与 Cassandra 兼容的宽列数据库服务。Neptune 是一个图形数据库服务,支持属性图和 RDF 模型。时间流是一种时间序列数据库服务。QLDB是一种分类账数据库服务。

CockroachDB 是一个分布式、水平可扩展、动态分片、关系、多模型数据库,它在键值存储之上实现 PostgreSQL;它具有很强的一致性和令人难以置信的生存能力。CockroachDB Core是免费和开源的;CockroachDB Enterprise是一个具有附加功能的商业版本;CockroachCloud是一个基于CockroachDB Enterprise和Kubernetes的供应商管理的多云数据库即服务;CockroachCloud Free是CockroachCloud的永久免费版本,功能有所减少,每个免费集群限制为1个vCPU和5 GB存储空间。CockroachDB 在 2020 年底增加了空间数据存储和索引。

Couchbase Server 是一个内存优先、分布式、灵活的 JSON 文档数据库,在本地群集中具有很强的一致性。Couchbase Lite是一个移动版本,可以在本地运行,也可以在连接时同步到服务器。Couchbase Cloud 是一个完全托管的 NoSQL 数据库即服务,适用于任务关键型应用程序,可在 AWS 或 Microsoft Azure 上的云环境中自动部署和管理 Couchbase Server。

DataStax Enterprise 是开源宽列数据库 Apache Cassandra 的增强型云原生版本。DataStax Astra 是一个云原生的多云、无服务器、可扩展、多区域 DBaaS,基于 Apache Cassandra/DataStax Enterprise。存储附加索引为非主键提供了 Astra 查询功能,这在任何其他版本的 Cassandra 上尚不可用。

谷歌云托管了十几种数据库。关系数据库包括适用于 Oracle数据库的裸机解决方案;Cloud SQL for MySQL、PostgreSQL 和 Microsoft SQL Server;和 Google Cloud Spanner,它是云原生的,具有无限的规模、一致性和 99.999% 的可用性。Google Cloud Bigtable是一个类似于Cassandra或HBase的宽列商店。Firestore 和 Firebase 实时数据库是文档数据库。内存存储支持 Redis 和 Memcached API。Google Cloud Partner Services 支持 MongoDB、DataStax、Redis Labs 和 Neo4j 的托管产品。

IBM在其云中提供了大约10种数据库。关系数据库服务包括PostgreSQL,EnterpriseDB(PostgreSQL的商业扩展)和IBM Db2.NoSQL数据库服务包括IBM Cloudant(文档数据库),MongoDB(也是文档数据库),DataStax(宽列Cassandra的商业扩展)和Redis(内存数据结构存储,用作数据库,缓存和消息代理)。IBM 在端到端加密的超保护环境中托管 PostgreSQL 和 MongoDB。

Microsoft Azure 支持八个事务性云数据库。Azure SQL 是 SQL Server 的云原生版本,是一个关系多模型数据库;Azure SQL 实例与此类似,但提供与最新 SQL Server 引擎的最大兼容性。您还可以在虚拟机中运行 SQL Server。Azure Database 支持 MariaDB、MySQL 和 PostgreSQL。Cosmos DB 是一种高可用性、多模型、多区域数据库服务,提供文档模型、宽列模型、键值模型和图形模型,尽管每个实例一个模型。Azure Cache 与 Redis 兼容。适用于 Cassandra 的 Azure 托管实例是一个托管宽列数据库,可与本地 Cassandra 群集同步。

      MongoDB Atlas是一种多云文档数据库服务,可在AWS,Google Cloud和Microsoft Azure上使用。MongoDB本身可以作为托管服务或在基本上每个云服务提供商的虚拟机中使用。

     MySQL、MariaDB、Vitess、PlanetScale 和 SkySQL 是作为云服务提供的 MySQL 派生数据库。MySQL 是一个开源多模型关系数据库,作为托管服务提供在 AWS、Google Cloud、Microsoft Azure 和 Oracle Cloud 中,以及几乎所有云服务提供商的虚拟机上。MariaDB 是由原始开发人员创建的 MySQL 分支。Vitess 是一个用于 MySQL 横向扩展的数据库集群系统,具有自动分片功能。PlanetScale 是一款由 Vitess 提供支持的 MySQL 兼容的无服务器数据库平台。SkySQL 是 AWS 和 Google Cloud 中提供的 MariaDB 服务。
       Neo4j是一个符合ACID的属性图数据库,具有许多聚类功能。Neo4j Aura是一个快速,可靠,可扩展且完全自动化的Neo4j图形数据库,作为云服务提供。Aura的免费和专业级别仅在Google Cloud上可用。企业级在AWS和Google Cloud上均可用。
       Oracle数据库是第一个商业关系数据库,它仍然是领先的关系多模型数据库。它在 Oracle 云即服务中以多种形式和大小提供;MySQL也可以在Oracle云中作为服务使用。Oracle 数据库还可用于本地部署以及 AWS 和 Google 云。

        Redis 是一种 NoSQL,内存中数据结构存储,可以保留在磁盘上。它可以用作数据库、缓存和消息代理。它通过 Redis Sentinel 提供高可用性,并使用 Redis 集群提供自动分区。Redis 企业版增加了一些功能,以提高速度、可靠性和灵活性,并可作为云数据库即服务使用。Redis on Flash 是一项 Redis Enterprise 功能,可以显著降低 Redis 的硬件成本。Redis Enterprise Cloud 实例可在 AWS、Google Cloud 和 Microsoft Azure 上使用;您可以选择自己的一个或多个区域。您还可以在云虚拟机、Kubernetes 或容器中运行 Redis。

无论您为应用程序选择哪种或多几个数据库,都不要忘记在提交之前运行概念证明,并在投入生产之前运行负载测试。许多云数据库可以根据需要向上和向外扩展,但并非所有云数据库都可以在不将数据传输到新实例然后关闭旧实例的情况下执行此操作。数据库投入生产后,使用超出范围情况的警报设置持续监视,并准备好处理紧急情况。请注意,某些数据库需要随着负载的变化而调整和更改其索引。




本文由“云原生数据库”进行翻译

原文链接:

https://www.infoworld.com/article/3627792/how-to-choose-a-cloud-database.html

文章转载自云原生数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论