如何为应用选择正确的数据库?这在很大程度上取决于用例特点,例如事务处理、分析处理、内存数据库等等·····当然我们在选择时还需考虑其他的因素。

本篇文章涵盖了 Google Cloud 跨关系数据库(SQL)和非关系数据库(NoSQL)的不同选项,并会解释哪些用例最适合哪个数据库类型。

关系型数据库

在关系型数据库中,数据储存在表、行和列中,通常适用于结构化数据。因此数据结构不经常发生变化的情况下多使用关系型数据库。在与大多数关系型数据库交互时往往会用到SQL,这会为数据提供 ACID 一致性模式。

主要特点包括:

  • 原子性:事务中的所有操作均成功或被回滚;
  • 一致性:事务完成后,数据库在结构上是健全的;
  • 隔离性:事务之间不相互竞争,对数据的争用访问由数据库控制,以便事务看起来是按顺序运行的;
  • 持久性:应用事务的结果是永久性的,即使出现故障。


由于这些特性,关系数据库常常被用于需要高精度的应用程序和交易查询,如金融和零售交易。例如:在银行业务中,当客户提出资金转账请求时,我们希望确保交易是可能的,并且交易实际上发生在最新的账户余额上,这种情况下,错误或重新提交请求可能没问题。


Google Cloud 中有三个关系型数据库选项可供选用:Cloud SQL、Cloud Spanner 和 Bare Metal Solution。

Cloud SQL

在 Google Cloud 上提供托管的 MySQL、PostgreSQL 和 SQL Server 数据库。它降低了维护成本,并自动化了数据库配置、存储容量管理、备份以及开箱即用的高可用性和灾难恢复/故障转移。所以最适合通用 Web 框架、CRM、ERP、SaaS 和电子商务的应用程序。

Cloud Spanner

Cloud Spanner 是一个企业级的、全球分布的、强一致性的数据库,提供高达 99.999% 的可用性,专为结合关系数据库结构和非关系横向扩展的优势而构建。这是一个独特的数据库,它将 ACID 事务、SQL 查询和关系结构与通常和非关系或 NoSQL 数据库相关联的可扩展性相结合。因此,Spanner 最适合用于游戏、支付解决方案、全球金融分类账、零售银行和库存管理等需要具有强一致性和高可用性的无限扩展能力的应用程序。

Bare Metal Solution

该方案提供硬件以在 Google Cloud 上以低延迟运行专门的工作负载。如果想要将 Oracle 数据库提升并转移到 GCP,该方案会特别有帮助。可以说该方案让数据中心逐渐退出”历史舞台“,并为实现应用程序的现代化铺平了道路。


非关系型数据库

非关系数据库(或 NoSQL 数据库)以非表格(如文档)的形式存储复杂的非结构化数据。当需要组织大量复杂多样的数据时,经常使用非关系数据库。

与关系数据库不同,它非关系型数据库执行速度更快,因为查询不必访问多个表来提供答案,因此非常适合存储可能经常更改的数据或处理多种不同类型数据的应用程序。

例如,服装商店可能有一个数据库,其中衬衫有自己的文档,包含所有信息。包括尺寸、品牌和颜色,并为以后添加更多参数(如袖子尺寸、领子等)留出空间。


主要特点包括:

  • 最终一致性,存储通常在稍后的某个时间点表现出一致性。例如,在读取时延迟;
  • 水平伸缩,通常适用散列分布;
  • 通常会针对特定的工作负载模式进行优化,如键值、图形、宽列等;
  • 往往不支持跨分片事务或灵活的隔离模式。

由于这些特点,非关系数据库被用于需要大规模、可靠性、可用性和频繁数据更改的应用程序中。它们可以通过添加更多的服务器轻松地横向扩展。而不像某些关系数据库那样,随着数据的增长,需要通过增加机器大小来纵向扩展。当然,一些关系型数据库,例如 Cloud Spanner 也支持向外扩展和强一致性。

非关系数据库可以存储各种非结构化数据,如文档、键值、图、宽列等。以下是谷歌云中的非关系型数据库可供选用:

文档数据库:将信息存储为文档(采用 JSON 和 XML 等格式)。例如:Firestore ;

键值存储:将集合中的关联数据与使用唯一键标识的记录进行分组,以便于检索。键值存储的结构刚好足以反映关系数据库的价值,同时仍保留 NoSQL 的优势。例如:Datastore、Bigtable、Memorystore ;

内存数据库:主要依赖内存进行数据存储的专用数据库。这些旨在通过消除访问磁盘的需要来获得最短的响应时间。它们非常适合需要微秒响应时间并且可能有大量流量峰值的应用程序。例如:Memorystore ;

宽列数据库:使用表格格式,但即使在同一个表中,每行的数据命名和格式化方式也有很大的差异。它们具有一些基本结构,同时保留了很大的灵活性。例如:Bigtable

图数据库:使用图结构来定义存储数据点之间的关系,用于识别非结构化和半结构化信息中的模式。例如:JanusGraph 。

下面我们详细介绍一下 Google Cloud 中的三个非关系型数据库:

Firestore

这是一个无服务器文档数据库,可按需扩展并充当后端, DBaaS 提高了构建应用程序的速度。它非常适合所有通用用例,例如电子商务、游戏、物联网和实时仪表板。借助 Firestore,用户可以与实时或离线数据进行交互和协作,也就是说 Firestore 非常适合实时应用程序和移动应用程序。

Cloud Bigtable

Cloud Bigtable 是一个单索引的、系数表,可以扩展到数十亿行和数千列,能够存储 TB 甚至 PB 级的数据。非常适合以极低的延迟存储大量单键数据,其读写延迟是亚毫秒级的,并且支持高吞吐量,是 MapReduce 操作的理想数据源。它还支持开源 HBase API 标准,可轻松与 Apache 生态系统(包括 HBase、Beam、Hadoop 和 Spark 以及 Google Cloud 生态系统)集成。

应用场景包括金融(交易历史、股价、汇率)、广告营销(购买历史和用户行为)、能源/物联网(电表和家电数据)、生物医药和电信等行业的大数据分析,包括时间序列数据。标杆案例也是金融软件巨头SunGuard的一个审计原型系统,每秒能处理250万条交易信息。

Memorystore

这是一种完全托管的内存数据存储服务,适用于 Google Cloud 上的 Redis 和 Memcached。最适合内存和临时数据存储,并自动执行配置、复制、故障转移和修补等复杂任务,因此使用者可以花更多时间进行编码。因为其提供极低的延迟和高性能,所以 Memorystore 非常适合游戏、排行榜、社交、聊天和新闻等应用程序。

总的来说,究竟是选择关系型数据库还是非关系型数据库在很大程度上取决于用例。如果您的应用程序需要 ACID 事务,而且数据结构不会发生太大的变化,那么就可以选择关系数据库。

在 Google Cloud 中,可以为任何通用 SQL 数据库使用 Cloud SQL,可以为大规模的、全局可伸缩的、高度一致的用例使用 Cloud Spanner ······

对于非关系型数据库,Google Cloud 当然也提供了很多选项,例如支持支持跨文档、键值和宽列数据库范围的各种用例的 Firestore、Memorystore、Cloud Bigtable 等等。

关于数据库更多的比较信息,可以查看下方链接。

🔗: https://cloud.google.com/products/databases

返回全部