【译】亚马逊CTO Werner:传统通用数据库难以解决所有场景

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 译者按:本文作者是亚马逊CTO Werner,今日在其个人博客上发表的关于行业产品的最新见解。如果你对数据库了解不多,则本文能够帮助建立一个宏观的理解,同时能参考亚马逊的产品来指导在企业内部进行数据库技术选型。

译者按:本文作者是亚马逊CTO Werner,今日在其个人博客上发表的关于行业产品的最新见解。如果你对数据库了解不多,则本文能够帮助建立一个宏观的理解,同时能参考亚马逊的产品来指导在企业内部进行数据库技术选型。


【译文】
我经常被问及的一个问题,为什么我们(亚马逊)提供这么多数据库产品?对我来说答案很简单:开发人员希望他们的应用程序能够很好地架构和有效扩展。为此,他们需要能够在同一个应用程序中使用多个数据库和数据模型。

一套数据库很少能满足多个不同使用场景的需求。一套数据库能满足所有场景的时代已经过去,开发人员如今正在构建高度分布式的应用程序,需要使用大量专用数据库。开发人员正在做他们最擅长的事情:将复杂的应用程序分解成更小的部分,然后选择最佳工具来解决每个问题。使用场景不同,同一个任务的最合适的工具也不同。

几十年来,因为唯一的数据库选择就是关系数据库,无论应用程序中数据的类型或功能如何,数据都会被建模为关系数据库,而不是靠使用用例来驱动对数据库对需求。数据库曾经主导来应用使用数据对数据模型。关系数据库是否为规范化模式专门设计的吗?要在数据库中强制引用完整性?当然是,但问题但关键是不是所有应用程序数据模型或用例都与关系模型匹配。

正如我之前谈到的,我们构建Amazon DynamoDB原因之一是亚马逊当时正在推动当前领先的商业数据库的极限,我们无法维持亚马逊业务增长所需要的可用性、可扩展性和性能需求。我们发现大约70%的操作是键值查找,即只使用了主键并且返回了一行。由于不需要引用完整性和事务,我们意识到这些访问模式可以通过不同类型的数据库更好地满足。此外,随着Amazon.com的增长和扩展,无限的横向扩展需要成为一个关键的设计点 ,但简单扩展并不是一个有效的选择。这最终导致了DynamoDB的诞生,一种非关系型数据库服务,它可以扩展到超出关系数据库的限制。

这并不意味着关系数据库在当前的开发实践中不再能提供实用性,可用性,可扩展或提供高性能。事实上,我们的客户已经证明了这一点,因为Amazon Aurora仍然是AWS历史上发展最快的服务。我们在Amazon.com上遇到的是,用户以超出预期的方式在使用数据库。这正是本博客后续的核心 - 数据库是为了一个目的而构建的,将用例与数据库相匹配将有助于您更快地开发高性能,可扩展且功能更强的应用程序。

专用数据库

世界仍在变化,非关系数据库的种类继续在增加。我们越来越多地看到,客户希望基于不同数据模型构建在全网扩展的应用程序。为了满足这些需求,开发人员现在可以选择关系,键值,文档,图形,内存和搜索数据库。每一类数据库都解决了一个特定问题或一组问题。

img_587832c8fd33380d1dcb6043edf60e09.png
亚马逊数据库全家福

让我们仔细看看上面每个数据库的目的:

  • 关系:关系数据库是自描述的,因为它使开发人员能够定义数据库的模式以及数据库中行和表之间的关系和约束。开发人员依赖关系数据库(而不是应用程序代码)的功能来保证数据模式和数据库中数据的引用完整性。关系数据库的典型用例包括Web和移动应用程序,企业应用程序和在线游戏。Airbnb是客户使用Amazon Aurora构建高性能和可扩展应用程序的一个很好的例子。Aurora为Airbnb提供了一个完全托管,可扩展且功能齐全的服务,来运行他们的MySQL工作负载。

  • 键值:键值数据库具有高度可分区性,允许在其他类型的数据库无法实现的级别进行水平扩展。游戏、广告技术和物联网等用例特别适合于键值数据模型,其中访问模式要求针对已知键值的低延迟查询/写入。DynamoDB的目的是为任何规模的工作负载提供持续的毫秒级延迟服务。这种一致的性能是Snapchat Stories功能(包括Snapchat最大的存储写入工作负载)迁移到DynamoDB的重要原因。

  • 文档:文档数据库的使用对于开发者来说非常直观,因为应用程序层中的数据通常表示为JSON格式文档。开发者可以使用和应用程序代码中的相同文档模型格式来保留数据。Tinder是使用DynamoDB的灵活模式模型来实现开发人员效率的一个客户示例。

  • 图:图数据库的目的是使构建和运行使用高度连接的数据集应用程序变得容易。图数据库的典型用例包括社交网络,推荐引擎,欺诈检测和知识图。Amazon Neptune是一个完全托管的图形数据库服务。Neptune支持Property Graph模型和Resource Description Framework(RDF)框架,有两个图形API可供选择:TinkerPop和RDF / SPARQL。目前的Neptune用户主要是构建知识图表,构建游戏内置的推荐和欺诈检测。例如,汤森路透通过使用Neptune帮助他们的客户浏览复杂的全球税收政策和法规网络。

  • 内存:金融服务,电子商务,Web和移动应用程序都有排行榜,会话存储和实时分析等场景,它们需要微秒响应时间,并且随时可能出现大量流量峰值。我们构建了Amazon ElastiCache,提供Memcached和Redis,满足低延迟,高吞吐量的工作负载的需求,例如麦当劳,这些工作负载无法由基于磁盘的数据存储负担。Amazon DynamoDB Accelerator(DAX)是专用数据存储的另一个示例。构建DAX是为了使DynamoDB读取速度提高一个数量级。

  • 搜索:许多应用程序借助输出日志,帮助开发人员解决问题。Amazon Elasticsearch Service(Amazon ES)的定位是,通过对机器产生对数据建立索引,聚合和搜索半结构化日志和指标,提供近乎实时的可视化和分析。Amazon ES也是一款功能强大的高性能搜索引擎,可用于全文搜索。Expedia正在使用150多个Amazon ES域,30 TB数据和300亿个文档,处理各种关键任务,包括运营监控和故障排除,分布式应用程序堆栈跟踪和定价优化。

使用专用数据库构建应用程序
开发人员正在构建高度分布式和松耦合的应用程序,AWS使开发人员能够使用多个AWS服务构建这些云原生应用程序。以Expedia为例。虽然对于客户来说,Expedia网站看起来像一个应用程序,但在幕后,Expedia.com由许多组件组成,每个组件都具有特定的功能。通过将诸如Expedia.com之类的应用程序分解为具有特定作业的多个组件(例如微服务,容器和AWS Lambda函数),开发人员可以通过提高规模和性能,减少运维,提高部署灵活性以及组件独立发展,来提高工作效率。构建应用程序时,开发人员可以将每个应用场景,选择最适合需要的数据库。

为了实现这一点,请查看一些使用多种不同类型的数据库来构建应用程序的客户:

  • Airbnb使用DynamoDB存储用户的搜索历史记录,以便快速查找,以及提供个性化搜索。Airbnb还使用ElastiCache在内存中存储会话状态,以便更快地进行站点服务,并且他们使用Amazon RDS上的MySQL 作为其主要事务数据库。
  • Capital One使用Amazon RDS存储状态管理的交易数据,使用Amazon Redshift存储需要聚合分析的Web日志,使用DynamoDB存储用户数据,以便客户可以使用Capital One应用程序快速访问其信息。
  • Expedia使用Aurora,Amazon Redshift和ElastiCache构建了一个实时数据仓库,用于住宿市场定价,保证数据可用性以进行内部市场分析。数据仓库使用ElastiCache for Redis执行多数据流联合,并使用24小时回顾窗口进行自联接。数据仓库还将处理后的数据直接保存到Aurora MySQL和Amazon Redshift中,以支持运营和分析查询。
  • Zynga将Zynga扑克数据库从MySQL服务器场迁移到DynamoDB,并获得了巨大的性能提升。过去需要30秒的查询,现在只需要一秒钟。Zynga还使用ElastiCache(Memcached和Redis)代替自己运维对内存缓存服务。Aurora的自动化和Serverless可扩展性使其成为Zynga使用关系数据库时的首选。
  • 强生公司使用Amazon RDS,DynamoDB和Amazon Redshift来最大限度地减少收集和配置数据所花费的时间和精力,更快速的获得洞察。AWS数据库服务正在帮助强生公司改善医生的工作流程,优化供应链和发现新药。

就像开发人员不再编写单一应用程序一样,开发人员也不再需要使用单一数据库来处理应用程序中的所有场景 - 他们可以使用的是多种数据库。虽然关系数据库仍然存在且生命力旺盛,并且仍然适用于许多用例,但是用于键值,文档,图形,内存和搜索用例的专用数据库可以帮助你优化功能、性能和扩展性 - 更重要的是 - 你的客户体验。


原文:https://www.allthingsdistributed.com/2018/06/purpose-built-databases-in-aws.html

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
安全 关系型数据库 MySQL
MySQL数据库高效秘籍:10个小技巧,让你轻松应对各种场景!
【8月更文挑战第25天】本文介绍了十个提升MySQL数据库效率与安全性的实用技巧。涵盖查询性能分析、索引优化、慢查询日志利用、图形化工具如MySQL Workbench的应用、性能分析工具、主从复制实现、备份与恢复策略、数据库迁移方法及安全性保障等多个方面。通过具体的示例代码展示每个技巧的实际操作方式,帮助读者深入理解并有效运用MySQL数据库。
250 0
|
2月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
200 64
|
1月前
|
架构师 数据库
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
数据库乐观锁是必知必会的技术栈,也是大厂面试高频,十分重要,本文解析数据库乐观锁。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
|
5月前
|
存储 Oracle 关系型数据库
关系型数据库Oracle应用场景
【7月更文挑战第5天】
170 3
|
2月前
|
供应链 数据库
数据库事务安全性控制有什么应用场景吗
【10月更文挑战第15天】数据库事务安全性控制有什么应用场景吗
|
3月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
528 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
3月前
|
JavaScript 前端开发 数据库
数据库测试场景实践总结
本文介绍了数据库超时和应用锁表SSDB测试场景的验证方法,通过锁定数据表模拟写入失败情况,并利用SSDB进行重试。测试需开发人员配合验证功能。同时,提供了SSDB服务器登录、查询队列数量及重启服务等常用命令。适用于验证和解决数据库写入问题。
42 7
|
4月前
|
存储 前端开发 中间件
CTO要求把所有逻辑放到数据库:合理性的深度剖析
【8月更文挑战第12天】在软件开发领域,关于系统架构的决策往往能深刻影响项目的成败。当CTO提出将所有逻辑放到数据库中的要求时,这一决策无疑会引发团队内部的广泛讨论。本文将从技术合理性、维护性、性能及可扩展性等多个维度,深入探讨这一要求的合理性与潜在影响,旨在为读者提供全面而深入的技术见解。
62 1
|
5月前
|
缓存 NoSQL 数据库
Redis问题之在高并发场景下,保证Redis缓存和数据库的一致性如何解决
Redis问题之在高并发场景下,保证Redis缓存和数据库的一致性如何解决
178 3
|
5月前
|
Oracle 关系型数据库 数据处理